Skip to content

Commit 83d07c7

Browse files
committed
feat: enhance OOO request handling and validation
1 parent a30d990 commit 83d07c7

File tree

2 files changed

+71
-9
lines changed

2 files changed

+71
-9
lines changed

models/requests.ts

Lines changed: 59 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import firestore from "../utils/firestore";
22
const requestModel = firestore.collection("requests");
3-
import { REQUEST_ALREADY_APPROVED, REQUEST_ALREADY_REJECTED, REQUEST_STATE } from "../constants/requests";
3+
import { REQUEST_ALREADY_APPROVED, REQUEST_ALREADY_REJECTED, REQUEST_STATE, REQUEST_TYPE } from "../constants/requests";
44
import {
55
ERROR_WHILE_FETCHING_REQUEST,
66
ERROR_WHILE_CREATING_REQUEST,
@@ -9,6 +9,7 @@ import {
99
} from "../constants/requests";
1010
import { getUserId } from "../utils/users";
1111
import { NotFound } from "http-errors";
12+
import { fetchUser } from "./users";
1213
const SIZE = 5;
1314

1415
export const createRequest = async (body: any) => {
@@ -30,7 +31,7 @@ export const createRequest = async (body: any) => {
3031
}
3132
};
3233

33-
export const updateRequest = async (id: string, body: any, lastModifiedBy: string, type:string) => {
34+
export const updateRequest = async (id: string, body: any, lastModifiedBy: string, type: string) => {
3435
try {
3536
const existingRequestDoc = await requestModel.doc(id).get();
3637
if (!existingRequestDoc.exists) {
@@ -104,11 +105,10 @@ export const getRequests = async (query: any) => {
104105
...requestDoc.data(),
105106
};
106107
}
107-
108-
if(requestedBy && dev){
108+
109+
if (requestedBy && dev) {
109110
requestQuery = requestQuery.where("requestedBy", "==", requestedBy);
110-
}
111-
else if (requestedBy) {
111+
} else if (requestedBy) {
112112
const requestedByUserId = await getUserId(requestedBy);
113113
requestQuery = requestQuery.where("requestedBy", "==", requestedByUserId);
114114
}
@@ -165,6 +165,59 @@ export const getRequests = async (query: any) => {
165165
return null;
166166
}
167167

168+
// todo: remove this once previous OOO requests are removed form the database
169+
// @ankush and @suraj had a discussion to manually update or remove the previous OOO requests
170+
if (type === REQUEST_TYPE.OOO) {
171+
const oooRequests = [];
172+
if (!dev) {
173+
for (const request of allRequests) {
174+
if (request.status) {
175+
const modifiedRequest = {
176+
id: request.id,
177+
type: request.type,
178+
from: request.from,
179+
until: request.until,
180+
message: request.reason,
181+
state: request.status,
182+
lastModifiedBy: request.lastModifiedBy ?? "",
183+
requestedBy: request.userId,
184+
reason: request.comment ?? "",
185+
createdAt: request.createdAt,
186+
updatedAt: request.updatedAt,
187+
};
188+
oooRequests.push(modifiedRequest);
189+
} else {
190+
oooRequests.push(request);
191+
}
192+
}
193+
} else {
194+
for (const request of allRequests) {
195+
if (request.state) {
196+
const userResponse: any = await fetchUser({ userId: request.requestedBy });
197+
const username = userResponse.user.username;
198+
199+
const modifiedRequest = {
200+
id: request.id,
201+
type: request.type,
202+
from: request.from,
203+
until: request.until,
204+
reason: request.message,
205+
status: request.state,
206+
lastModifiedBy: request.lastModifiedBy ?? null,
207+
requestedBy: username,
208+
comment: request.reason ?? null,
209+
createdAt: request.createdAt,
210+
updatedAt: request.updatedAt,
211+
userId: request.requestedBy,
212+
};
213+
oooRequests.push(modifiedRequest);
214+
} else {
215+
oooRequests.push(request);
216+
}
217+
}
218+
}
219+
allRequests = oooRequests;
220+
}
168221
return {
169222
allRequests,
170223
prev: prevDoc.empty ? null : prevDoc.docs[0].id,
@@ -206,4 +259,3 @@ export const getRequestByKeyValues = async (keyValues: KeyValues) => {
206259
throw error;
207260
}
208261
};
209-

services/oooRequest.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
REQUEST_REJECTED_SUCCESSFULLY,
1313
INVALID_REQUEST_TYPE,
1414
} from "../constants/requests";
15-
import { userState } from "../constants/userStatus";
15+
import { statusState, userState } from "../constants/userStatus";
1616
import { createRequest, getRequestById } from "../models/requests";
1717
import { OooStatusRequest, OooStatusRequestBody } from "../types/oooRequest";
1818
import { UserStatus } from "../types/userStatus";
@@ -21,7 +21,7 @@ import { BadRequest, Conflict } from "http-errors";
2121
import { updateRequest } from "../models/requests";
2222
import { AcknowledgeOooRequestBody } from "../types/oooRequest";
2323
import { addFutureStatus } from "../models/userStatus";
24-
24+
import { createUserFutureStatus } from "../models/userFutureStatus";
2525
/**
2626
* Validates the user status.
2727
*
@@ -187,6 +187,16 @@ export const acknowledgeOooRequest = async (
187187
userId: requestData.userId,
188188
message: body.comment,
189189
});
190+
await createUserFutureStatus({
191+
requestId,
192+
status: userState.OOO,
193+
state: statusState.UPCOMING,
194+
from: requestData.from,
195+
endsOn: requestData.until,
196+
userId: requestData.userId,
197+
message: body.comment,
198+
createdAt: Date.now()
199+
});
190200
}
191201

192202
return {

0 commit comments

Comments
 (0)