diff --git a/models/requests.ts b/models/requests.ts index 064eebd8c..0a541fbe3 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 { fetchUser } from "./users"; const SIZE = 5; export const createRequest = async (body: any) => { @@ -149,6 +150,58 @@ export const getRequests = async (query: any) => { return null; } + if (type === REQUEST_TYPE.OOO) { + 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 { allRequests, prev: prevDoc.empty ? null : prevDoc.docs[0].id, 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 deleted file mode 100644 index 6b1c282a8..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 };