diff --git a/controllers/onboardingExtension.ts b/controllers/onboardingExtension.ts index f1f945cb3..c938d3f8a 100644 --- a/controllers/onboardingExtension.ts +++ b/controllers/onboardingExtension.ts @@ -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, @@ -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"; const requestModel = firestore.collection("requests"); /** @@ -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: {