From a8a81f6d44a393a9f05aadef7953fb9a94d9107e Mon Sep 17 00:00:00 2001 From: Suraj Maity Date: Sun, 4 May 2025 09:17:53 +0530 Subject: [PATCH 1/3] fix: OOO GET REQUEST DEV FLAG --- models/requests.ts | 7 ++++- types/oooRequest.d.ts | 15 ++++++++++ utils/requests.ts | 65 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 1 deletion(-) diff --git a/models/requests.ts b/models/requests.ts index 064eebd8c..8bf86d62b 100644 --- a/models/requests.ts +++ b/models/requests.ts @@ -1,6 +1,6 @@ import firestore from "../utils/firestore"; const requestModel = firestore.collection("requests"); -import { REQUEST_ALREADY_APPROVED, REQUEST_ALREADY_REJECTED, REQUEST_STATE } from "../constants/requests"; +import { REQUEST_ALREADY_APPROVED, REQUEST_ALREADY_REJECTED, REQUEST_STATE, REQUEST_TYPE } from "../constants/requests"; import { ERROR_WHILE_FETCHING_REQUEST, ERROR_WHILE_CREATING_REQUEST, @@ -8,6 +8,7 @@ import { REQUEST_DOES_NOT_EXIST, } from "../constants/requests"; import { getUserId } from "../utils/users"; +import { transformGetOooRequest } from "../utils/requests"; const SIZE = 5; export const createRequest = async (body: any) => { @@ -149,6 +150,10 @@ export const getRequests = async (query: any) => { return null; } + if (type === REQUEST_TYPE.OOO) { + allRequests = await transformGetOooRequest(dev, allRequests); + } + return { allRequests, prev: prevDoc.empty ? null : prevDoc.docs[0].id, diff --git a/types/oooRequest.d.ts b/types/oooRequest.d.ts index 6b1c282a8..88d7f4fb7 100644 --- a/types/oooRequest.d.ts +++ b/types/oooRequest.d.ts @@ -18,6 +18,21 @@ export type OooStatusRequest = { updatedAt: Timestamp; comment: string | null; }; + +export type OldOooRequest = { + id: string; + type: REQUEST_TYPE.OOO; + from: number; + until: number; + message: string; + state: REQUEST_STATE; + lastModifiedBy: string | null; + requestedBy: string; + reason: string | null; + createdAt: Timestamp; + updatedAt: Timestamp; +}; + export type OooStatusRequestBody = { from: number; until: number; diff --git a/utils/requests.ts b/utils/requests.ts index 9ea61f13c..5da79ee4b 100644 --- a/utils/requests.ts +++ b/utils/requests.ts @@ -1,3 +1,8 @@ +import { ERROR_WHILE_FETCHING_REQUEST } from "../constants/requests"; +import { fetchUser } from "../models/users"; +import { userData } from "../types/global"; +import { OldOooRequest, OooStatusRequest } from "../types/oooRequest"; + /** * Calculates the new deadline based on the current date, the old end date, and the additional duration in milliseconds. * @@ -31,4 +36,64 @@ export const convertDateStringToMilliseconds = (date: string): { isDate: boolean isDate: true, milliseconds, }; +}; + +export const transformGetOooRequest = async (dev, allRequests) => { + const oooRequests = []; + + if (dev) { + for (const request of allRequests) { + if (request.status) { + const modifiedRequest: OldOooRequest = { + id: request.id, + type: request.type, + from: request.from, + until: request.until, + message: request.reason, + state: request.status, + lastModifiedBy: request.lastModifiedBy ?? "", + requestedBy: request.userId, + reason: request.comment ?? "", + createdAt: request.createdAt, + updatedAt: request.updatedAt + }; + oooRequests.push(modifiedRequest); + } else { + oooRequests.push(request); + } + } + } else { + for (const request of allRequests) { + if (request.state) { + try { + const userResponse: any = await fetchUser({ userId: request.requestedBy }); + const username = userResponse.user.username; + + const modifiedRequest: OooStatusRequest = { + id: request.id, + type: request.type, + from: request.from, + until: request.until, + reason: request.message, + status: request.state, + lastModifiedBy: request.lastModifiedBy ?? null, + requestedBy: username, + comment: request.reason ?? null, + createdAt: request.createdAt, + updatedAt: request.updatedAt, + userId: request.requestedBy + }; + + oooRequests.push(modifiedRequest); + } catch (error) { + logger.error(ERROR_WHILE_FETCHING_REQUEST, error); + throw error; + } + } else { + oooRequests.push(request); + } + } + } + + return oooRequests; }; \ No newline at end of file From 2ba3e48b494d834a782cb67b7805c1bb9107e471 Mon Sep 17 00:00:00 2001 From: Suraj Maity Date: Tue, 6 May 2025 15:19:36 +0530 Subject: [PATCH 2/3] test case added --- models/requests.ts | 52 ++++++++++++++++++++++++- test/unit/models/requests.test.ts | 22 +++++++++++ types/oooRequest.d.ts | 17 +------- utils/requests.ts | 65 ------------------------------- 4 files changed, 73 insertions(+), 83 deletions(-) diff --git a/models/requests.ts b/models/requests.ts index 8bf86d62b..0a541fbe3 100644 --- a/models/requests.ts +++ b/models/requests.ts @@ -8,7 +8,7 @@ import { REQUEST_DOES_NOT_EXIST, } from "../constants/requests"; import { getUserId } from "../utils/users"; -import { transformGetOooRequest } from "../utils/requests"; +import { fetchUser } from "./users"; const SIZE = 5; export const createRequest = async (body: any) => { @@ -151,7 +151,55 @@ export const getRequests = async (query: any) => { } if (type === REQUEST_TYPE.OOO) { - allRequests = await transformGetOooRequest(dev, allRequests); + const oooRequests = []; + if (dev) { + for (const request of allRequests) { + if (request.status) { + const modifiedRequest = { + id: request.id, + type: request.type, + from: request.from, + until: request.until, + message: request.reason, + state: request.status, + lastModifiedBy: request.lastModifiedBy ?? "", + requestedBy: request.userId, + reason: request.comment ?? "", + createdAt: request.createdAt, + updatedAt: request.updatedAt + }; + oooRequests.push(modifiedRequest); + } else { + oooRequests.push(request); + } + } + } else { + for (const request of allRequests) { + if (request.state) { + const userResponse: any = await fetchUser({ userId: request.requestedBy }); + const username = userResponse.user.username; + + const modifiedRequest = { + id: request.id, + type: request.type, + from: request.from, + until: request.until, + reason: request.message, + status: request.state, + lastModifiedBy: request.lastModifiedBy ?? null, + requestedBy: username, + comment: request.reason ?? null, + createdAt: request.createdAt, + updatedAt: request.updatedAt, + userId: request.requestedBy + }; + oooRequests.push(modifiedRequest); + } else { + oooRequests.push(request); + } + } + } + allRequests = oooRequests; } return { diff --git a/test/unit/models/requests.test.ts b/test/unit/models/requests.test.ts index 954024c86..5b9559815 100644 --- a/test/unit/models/requests.test.ts +++ b/test/unit/models/requests.test.ts @@ -164,6 +164,28 @@ describe("models/oooRequests", () => { const oooRequestData = await getRequests(query); expect(oooRequestData.allRequests).to.have.lengthOf(1); }); + + it("should return OOO requests with state and message field when dev is true", async () => { + await createRequest(createOooRequests); + await createRequest(createOooRequests2); + const query = { dev: "true", type: REQUEST_TYPE.OOO }; + const oooRequests = await getRequests(query); + oooRequests.allRequests.forEach((request) => { + expect(request).to.have.property('state'); + expect(request).to.have.property('message'); + }); + }); + + it("should return OOO requests with status and reason field when dev is false", async () => { + await createRequest(createOooRequests); + await createRequest(createOooRequests2); + const query = { dev: "false", type: REQUEST_TYPE.OOO }; + const oooRequests = await getRequests(query); + oooRequests.allRequests.forEach((request) => { + expect(request).to.have.property('status'); + expect(request).to.have.property('reason'); + }); + }); }); describe("getRequestByKeyValue", () => { diff --git a/types/oooRequest.d.ts b/types/oooRequest.d.ts index 88d7f4fb7..30bff7f47 100644 --- a/types/oooRequest.d.ts +++ b/types/oooRequest.d.ts @@ -18,21 +18,6 @@ export type OooStatusRequest = { updatedAt: Timestamp; comment: string | null; }; - -export type OldOooRequest = { - id: string; - type: REQUEST_TYPE.OOO; - from: number; - until: number; - message: string; - state: REQUEST_STATE; - lastModifiedBy: string | null; - requestedBy: string; - reason: string | null; - createdAt: Timestamp; - updatedAt: Timestamp; -}; - export type OooStatusRequestBody = { from: number; until: number; @@ -56,4 +41,4 @@ export type OooRequestCreateRequest = Request & { query: RequestQuery; }; -export type OooRequestUpdateRequest = Request & { oooRequestUpdateBody , userData: userData , query: RequestQuery , params: RequestParams }; +export type OooRequestUpdateRequest = Request & { oooRequestUpdateBody , userData: userData , query: RequestQuery , params: RequestParams }; \ No newline at end of file diff --git a/utils/requests.ts b/utils/requests.ts index 5da79ee4b..9ea61f13c 100644 --- a/utils/requests.ts +++ b/utils/requests.ts @@ -1,8 +1,3 @@ -import { ERROR_WHILE_FETCHING_REQUEST } from "../constants/requests"; -import { fetchUser } from "../models/users"; -import { userData } from "../types/global"; -import { OldOooRequest, OooStatusRequest } from "../types/oooRequest"; - /** * Calculates the new deadline based on the current date, the old end date, and the additional duration in milliseconds. * @@ -36,64 +31,4 @@ export const convertDateStringToMilliseconds = (date: string): { isDate: boolean isDate: true, milliseconds, }; -}; - -export const transformGetOooRequest = async (dev, allRequests) => { - const oooRequests = []; - - if (dev) { - for (const request of allRequests) { - if (request.status) { - const modifiedRequest: OldOooRequest = { - id: request.id, - type: request.type, - from: request.from, - until: request.until, - message: request.reason, - state: request.status, - lastModifiedBy: request.lastModifiedBy ?? "", - requestedBy: request.userId, - reason: request.comment ?? "", - createdAt: request.createdAt, - updatedAt: request.updatedAt - }; - oooRequests.push(modifiedRequest); - } else { - oooRequests.push(request); - } - } - } else { - for (const request of allRequests) { - if (request.state) { - try { - const userResponse: any = await fetchUser({ userId: request.requestedBy }); - const username = userResponse.user.username; - - const modifiedRequest: OooStatusRequest = { - id: request.id, - type: request.type, - from: request.from, - until: request.until, - reason: request.message, - status: request.state, - lastModifiedBy: request.lastModifiedBy ?? null, - requestedBy: username, - comment: request.reason ?? null, - createdAt: request.createdAt, - updatedAt: request.updatedAt, - userId: request.requestedBy - }; - - oooRequests.push(modifiedRequest); - } catch (error) { - logger.error(ERROR_WHILE_FETCHING_REQUEST, error); - throw error; - } - } else { - oooRequests.push(request); - } - } - } - - return oooRequests; }; \ No newline at end of file From 277da59b02fbdf43b6e064fd75a592526226138a Mon Sep 17 00:00:00 2001 From: Suraj Maity <60690636+surajmaity1@users.noreply.github.com> Date: Thu, 8 May 2025 01:02:40 +0530 Subject: [PATCH 3/3] Delete types/oooRequest.d.ts --- types/oooRequest.d.ts | 44 ------------------------------------------- 1 file changed, 44 deletions(-) delete mode 100644 types/oooRequest.d.ts diff --git a/types/oooRequest.d.ts b/types/oooRequest.d.ts deleted file mode 100644 index 30bff7f47..000000000 --- a/types/oooRequest.d.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Request, Response } from "express"; -import { REQUEST_STATE, REQUEST_TYPE } from "../constants/requests"; -import { Boom } from "express-boom"; -import { RequestParams, RequestQuery } from "./requests"; -import { userData } from "./global"; - -export type OooStatusRequest = { - id: string; - type: REQUEST_TYPE.OOO; - from: number; - until: number; - reason: string; - status: REQUEST_STATE; - lastModifiedBy: string | null; - requestedBy: string; - userId: string; - createdAt: Timestamp; - updatedAt: Timestamp; - comment: string | null; -}; -export type OooStatusRequestBody = { - from: number; - until: number; - type: REQUEST_TYPE.OOO; - reason: string; -}; - -export type OooRequestUpdateBody = { - lastModifiedBy?: string; - type?: REQUEST_TYPE.OOO; - id?: string; - reason?: string; - state: REQUEST_STATE.APPROVED | REQUEST_STATE.REJECTED; - updatedAt?: admin.firestore.Timestamp; -}; - -export type OooRequestResponse = Response & { boom: Boom }; -export type OooRequestCreateRequest = Request & { - body: OooStatusRequestBody; - userData: userData; - query: RequestQuery; -}; - -export type OooRequestUpdateRequest = Request & { oooRequestUpdateBody , userData: userData , query: RequestQuery , params: RequestParams }; \ No newline at end of file