Skip to content

Commit

Permalink
refactor: separate validation and update logic in service file
Browse files Browse the repository at this point in the history
  • Loading branch information
pankajjs committed Jan 16, 2025
1 parent bd71a2b commit 486a3de
Showing 1 changed file with 21 additions and 60 deletions.
81 changes: 21 additions & 60 deletions controllers/onboardingExtension.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import {
ERROR_WHILE_CREATING_REQUEST,
ERROR_WHILE_UPDATING_REQUEST,
INVALID_REQUEST_DEADLINE,
INVALID_REQUEST_TYPE,
LOG_ACTION,
ONBOARDING_REQUEST_CREATED_SUCCESSFULLY,
PENDING_REQUEST_UPDATED,
REQUEST_ALREADY_PENDING,
REQUEST_APPROVED_SUCCESSFULLY,
REQUEST_DOES_NOT_EXIST,
Expand Down Expand Up @@ -36,7 +33,7 @@ import {
import { convertDateStringToMilliseconds, getNewDeadline } from "../utils/requests";
import { convertDaysToMilliseconds } from "../utils/time";
import firestore from "../utils/firestore";
import { logType } from "../constants/logs";
import { updateOnboardingExtensionRequest, validateOnboardingExtensionUpdateRequest } from "../services/onboardingExtension";

Check failure on line 36 in controllers/onboardingExtension.ts

View workflow job for this annotation

GitHub Actions / build (20.11.x)

Cannot find module '../services/onboardingExtension' or its corresponding type declarations.
const requestModel = firestore.collection("requests");

/**
Expand Down Expand Up @@ -235,66 +232,30 @@ export const updateOnboardingExtensionRequestController = async (

try{
const extensionRequestDoc = await requestModel.doc(id).get();
const validationResponse = await validateOnboardingExtensionUpdateRequest(
extensionRequestDoc,
id,
isSuperuser,
lastModifiedBy,
body.newEndsOn,
)

if(!extensionRequestDoc.exists){
await addLog(logType.REQUEST_DOES_NOT_EXIST, { id }, { message: REQUEST_DOES_NOT_EXIST });
return res.boom.notFound(REQUEST_DOES_NOT_EXIST);
}

const extensionRequest = extensionRequestDoc.data() as OnboardingExtension;

if(!isSuperuser && lastModifiedBy !== extensionRequest.userId) {
await addLog(logType.UNAUTHORIZED_TO_UPDATE_REQUEST,
{ lastModifiedBy, userId: extensionRequest.userId },
{ message: UNAUTHORIZED_TO_UPDATE_REQUEST }
);
return res.boom.forbidden(UNAUTHORIZED_TO_UPDATE_REQUEST);
}

if(extensionRequest.type !== REQUEST_TYPE.ONBOARDING) {
await addLog(logType.INVALID_REQUEST_TYPE,
{ type: extensionRequest.type },
{ message: INVALID_REQUEST_TYPE }
);
return res.boom.badRequest(INVALID_REQUEST_TYPE);
if ('error' in validationResponse){
if(validationResponse.error === REQUEST_DOES_NOT_EXIST){
return res.boom.notFound(validationResponse.error);
}
if(validationResponse.error === UNAUTHORIZED_TO_UPDATE_REQUEST){
return res.boom.forbidden(UNAUTHORIZED_TO_UPDATE_REQUEST);
}
return res.boom.badRequest(validationResponse.error);
}

if(extensionRequest.state != REQUEST_STATE.PENDING){
await addLog(logType.PENDING_REQUEST_CAN_BE_UPDATED,
{ state: extensionRequest.state },
{ message:PENDING_REQUEST_UPDATED }
);
return res.boom.badRequest(PENDING_REQUEST_UPDATED);
}

if(extensionRequest.oldEndsOn >= body.newEndsOn) {
await addLog(logType.INVALID_REQUEST_DEADLINE,
{ oldEndsOn: extensionRequest.oldEndsOn, newEndsOn: body.newEndsOn },
{ message: INVALID_REQUEST_DEADLINE }
);
return res.boom.badRequest(INVALID_REQUEST_DEADLINE);
}

const requestBody = {
...body,
const requestBody = await updateOnboardingExtensionRequest(
extensionRequestDoc,
body,
lastModifiedBy,
updatedAt: Date.now(),
}

await requestModel.doc(id).update(requestBody);

const requestLog = {
type: REQUEST_LOG_TYPE.REQUEST_UPDATED,
meta: {
requestId: extensionRequestDoc.id,
action: LOG_ACTION.UPDATE,
createdBy: lastModifiedBy,
},
body: requestBody,
};

await addLog(requestLog.type, requestLog.meta, requestLog.body);

)

return res.status(200).json({
message: REQUEST_UPDATED_SUCCESSFULLY,
data: {
Expand Down

0 comments on commit 486a3de

Please sign in to comment.