@@ -9,15 +9,21 @@ import {
9
9
ERROR_WHILE_UPDATING_REQUEST ,
10
10
REQUEST_APPROVED_SUCCESSFULLY ,
11
11
REQUEST_REJECTED_SUCCESSFULLY ,
12
+ REQUEST_DOES_NOT_EXIST ,
13
+ UNAUTHORIZED_TO_ACKNOWLEDGE_OOO_REQUEST ,
14
+ REQUEST_ALREADY_APPROVED ,
15
+ REQUEST_ALREADY_REJECTED ,
12
16
} from "../constants/requests" ;
13
17
import { statusState } from "../constants/userStatus" ;
14
18
import { addLog } from "../models/logs" ;
15
19
import { createRequest , getRequestByKeyValues , getRequests , updateRequest } from "../models/requests" ;
16
20
import { createUserFutureStatus } from "../models/userFutureStatus" ;
17
21
import { addFutureStatus } from "../models/userStatus" ;
18
22
import { CustomResponse } from "../typeDefinitions/global" ;
19
- import { OooRequestCreateRequest , OooStatusRequest } from "../types/oooRequest" ;
23
+ import { AcknowledgeOOORequest , AcknowledgeOOORequestBody , OooRequestCreateRequest , OooRequestResponse , OooStatusRequest } from "../types/oooRequest" ;
20
24
import { UpdateRequest } from "../types/requests" ;
25
+ import firestore from "../utils/firestore" ;
26
+ const requestModel = firestore . collection ( "requests" ) ;
21
27
22
28
export const createOooRequestController = async ( req : OooRequestCreateRequest , res : CustomResponse ) => {
23
29
const requestBody = req . body ;
@@ -120,3 +126,98 @@ export const updateOooRequestController = async (req: UpdateRequest, res: Custom
120
126
return res . boom . badImplementation ( ERROR_WHILE_UPDATING_REQUEST ) ;
121
127
}
122
128
} ;
129
+
130
+ export const acknowledgeOOORequestController = async (
131
+ req : AcknowledgeOOORequest ,
132
+ res : OooRequestResponse )
133
+ : Promise < OooRequestResponse > => {
134
+
135
+ const dev = req . query . dev === "true" ;
136
+
137
+ if ( ! dev ) return res . boom . notImplemented ( "Feature not implemented" ) ;
138
+
139
+ const requestBody = req . body ;
140
+ const userId = req ?. userData ?. id ;
141
+ const requestId = req . params . id ;
142
+ const isSuperuser = req ?. userData ?. roles ?. super_user === true ;
143
+
144
+ if ( isSuperuser === false ) {
145
+ return res . boom . unauthorized ( UNAUTHORIZED_TO_ACKNOWLEDGE_OOO_REQUEST ) ;
146
+ }
147
+
148
+ try {
149
+ const request = await requestModel . doc ( requestId ) . get ( ) ;
150
+
151
+ if ( ! request . exists ) {
152
+ return res . boom . notFound ( REQUEST_DOES_NOT_EXIST ) ;
153
+ }
154
+
155
+ const requestData = request . data ( ) ;
156
+
157
+ if ( requestData . status === REQUEST_STATE . APPROVED ) {
158
+ return res . boom . badRequest ( REQUEST_ALREADY_APPROVED ) ;
159
+ }
160
+ else if ( requestData . status === REQUEST_STATE . REJECTED ) {
161
+ return res . boom . badRequest ( REQUEST_ALREADY_REJECTED ) ;
162
+ }
163
+
164
+ if ( requestData . type === REQUEST_TYPE . OOO ) {
165
+
166
+ requestBody . type = REQUEST_TYPE . OOO ;
167
+
168
+ const requestResult = await updateRequest ( requestId , requestBody , userId , REQUEST_TYPE . OOO ) ;
169
+ if ( "error" in requestResult ) {
170
+ return res . boom . badRequest ( requestResult . error ) ;
171
+ }
172
+ const [ logType , returnMessage ] =
173
+ requestResult . status === REQUEST_STATE . APPROVED
174
+ ? [ REQUEST_LOG_TYPE . REQUEST_APPROVED , REQUEST_APPROVED_SUCCESSFULLY ]
175
+ : [ REQUEST_LOG_TYPE . REQUEST_REJECTED , REQUEST_REJECTED_SUCCESSFULLY ] ;
176
+
177
+ const requestLog = {
178
+ type : logType ,
179
+ meta : {
180
+ requestId : requestId ,
181
+ action : LOG_ACTION . UPDATE ,
182
+ userId : userId ,
183
+ createdAt : Date . now ( ) ,
184
+ } ,
185
+ body : requestResult ,
186
+ } ;
187
+ await addLog ( requestLog . type , requestLog . meta , requestLog . body ) ;
188
+ if ( requestResult . status === REQUEST_STATE . APPROVED ) {
189
+ const requestData = await getRequests ( { id : requestId } ) ;
190
+
191
+ if ( requestData ) {
192
+ const { from, until, requestedBy, comment } = requestData as any ;
193
+ const userFutureStatusData = {
194
+ requestId,
195
+ status : REQUEST_TYPE . OOO ,
196
+ state : statusState . UPCOMING ,
197
+ from,
198
+ endsOn : until ,
199
+ userId : requestedBy ,
200
+ message : comment ,
201
+ } ;
202
+ await createUserFutureStatus ( userFutureStatusData ) ;
203
+ await addFutureStatus ( userFutureStatusData ) ;
204
+ }
205
+
206
+ return res . status ( 201 ) . json ( {
207
+ message : REQUEST_APPROVED_SUCCESSFULLY ,
208
+ } ) ;
209
+ }
210
+ return res . status ( 201 ) . json ( {
211
+ message : REQUEST_REJECTED_SUCCESSFULLY ,
212
+ } ) ;
213
+
214
+ } else {
215
+ return res . boom . notImplemented ( "Feature not implemented" ) ;
216
+ }
217
+ }
218
+ catch ( error ) {
219
+ logger . error ( ERROR_WHILE_UPDATING_REQUEST , error ) ;
220
+ return res . boom . badImplementation ( ERROR_WHILE_UPDATING_REQUEST ) ;
221
+ }
222
+
223
+ }
0 commit comments