1
1
import {
2
2
ERROR_WHILE_CREATING_REQUEST ,
3
+ ERROR_WHILE_UPDATING_REQUEST ,
3
4
LOG_ACTION ,
4
5
ONBOARDING_REQUEST_CREATED_SUCCESSFULLY ,
5
6
REQUEST_ALREADY_PENDING ,
7
+ REQUEST_APPROVED_SUCCESSFULLY ,
8
+ REQUEST_DOES_NOT_EXIST ,
6
9
REQUEST_LOG_TYPE ,
10
+ REQUEST_REJECTED_SUCCESSFULLY ,
7
11
REQUEST_STATE ,
8
12
REQUEST_TYPE ,
9
13
UNAUTHORIZED_TO_CREATE_ONBOARDING_EXTENSION_REQUEST ,
10
14
} from "../constants/requests" ;
11
15
import { userState } from "../constants/userStatus" ;
12
16
import { addLog } from "../services/logService" ;
13
- import { createRequest , getRequestByKeyValues } from "../models/requests" ;
17
+ import { createRequest , getRequestByKeyValues , updateRequest } from "../models/requests" ;
14
18
import { fetchUser } from "../models/users" ;
15
19
import { getUserStatus } from "../models/userStatus" ;
16
20
import { User } from "../typeDefinitions/users" ;
17
21
import {
18
22
CreateOnboardingExtensionBody ,
19
23
OnboardingExtension ,
20
24
OnboardingExtensionCreateRequest ,
21
- OnboardingExtensionResponse
25
+ OnboardingExtensionResponse ,
26
+ UpdateOnboardingExtensionStateRequest ,
27
+ UpdateOnboardingExtensionStateRequestBody
22
28
} from "../types/onboardingExtension" ;
23
29
import { convertDateStringToMilliseconds , getNewDeadline } from "../utils/requests" ;
24
30
import { convertDaysToMilliseconds } from "../utils/time" ;
@@ -34,7 +40,11 @@ import { convertDaysToMilliseconds } from "../utils/time";
34
40
* @param {OnboardingExtensionResponse } res - The Express response object used to send back the response.
35
41
* @returns {Promise<OnboardingExtensionResponse> } Resolves to a response with the status and data or an error message.
36
42
*/
37
- export const createOnboardingExtensionRequestController = async ( req : OnboardingExtensionCreateRequest , res : OnboardingExtensionResponse ) : Promise < OnboardingExtensionResponse > => {
43
+ export const createOnboardingExtensionRequestController = async (
44
+ req : OnboardingExtensionCreateRequest ,
45
+ res : OnboardingExtensionResponse )
46
+ : Promise < OnboardingExtensionResponse > => {
47
+
38
48
try {
39
49
40
50
const data = req . body as CreateOnboardingExtensionBody ;
@@ -121,4 +131,72 @@ export const createOnboardingExtensionRequestController = async (req: Onboarding
121
131
logger . error ( ERROR_WHILE_CREATING_REQUEST , err ) ;
122
132
return res . boom . badImplementation ( ERROR_WHILE_CREATING_REQUEST ) ;
123
133
}
124
- } ;
134
+ } ;
135
+
136
+ /**
137
+ * Updates the state of an onboarding extension request.
138
+ *
139
+ * @param {UpdateOnboardingExtensionStateRequest } req - The request object containing the update details.
140
+ * @param {OnboardingExtensionResponse } res - The response object to send the result of the update.
141
+ * @returns {Promise<OnboardingExtensionResponse> } Sends the response with the result of the update operation.
142
+ */
143
+ export const updateOnboardingExtensionRequestState = async (
144
+ req : UpdateOnboardingExtensionStateRequest ,
145
+ res : OnboardingExtensionResponse )
146
+ : Promise < OnboardingExtensionResponse > => {
147
+
148
+ const dev = req . query . dev === "true" ;
149
+
150
+ if ( ! dev ) return res . boom . notImplemented ( "Feature not implemented" ) ;
151
+
152
+ const body = req . body as UpdateOnboardingExtensionStateRequestBody ;
153
+ const lastModifiedBy = req ?. userData ?. id ;
154
+ const extensionId = req . params . id ;
155
+
156
+ let requestBody : UpdateOnboardingExtensionStateRequestBody = {
157
+ state : body . state ,
158
+ type : body . type ,
159
+ }
160
+
161
+ if ( body . message ) {
162
+ requestBody = { ...requestBody , message : body . message } ;
163
+ }
164
+
165
+ try {
166
+ const response = await updateRequest ( extensionId , requestBody , lastModifiedBy , REQUEST_TYPE . ONBOARDING ) ;
167
+
168
+ if ( "error" in response ) {
169
+ if ( response . error === REQUEST_DOES_NOT_EXIST ) {
170
+ return res . boom . notFound ( response . error ) ;
171
+ }
172
+ return res . boom . badRequest ( response . error ) ;
173
+ }
174
+
175
+ const [ logType , returnMessage ] = response . state === REQUEST_STATE . APPROVED
176
+ ? [ REQUEST_LOG_TYPE . REQUEST_APPROVED , REQUEST_APPROVED_SUCCESSFULLY ]
177
+ : [ REQUEST_LOG_TYPE . REQUEST_REJECTED , REQUEST_REJECTED_SUCCESSFULLY ] ;
178
+
179
+ const requestLog = {
180
+ type : logType ,
181
+ meta : {
182
+ requestId : extensionId ,
183
+ action : LOG_ACTION . UPDATE ,
184
+ createdBy : lastModifiedBy ,
185
+ } ,
186
+ body : response ,
187
+ } ;
188
+
189
+ await addLog ( requestLog . type , requestLog . meta , requestLog . body ) ;
190
+
191
+ return res . status ( 200 ) . json ( {
192
+ message : returnMessage ,
193
+ data : {
194
+ id : response . id ,
195
+ ...response ,
196
+ } ,
197
+ } ) ;
198
+ } catch ( error ) {
199
+ logger . error ( ERROR_WHILE_UPDATING_REQUEST , error ) ;
200
+ return res . boom . badImplementation ( ERROR_WHILE_UPDATING_REQUEST ) ;
201
+ }
202
+ }
0 commit comments