@@ -6,6 +6,8 @@ const { EXTENSION_REQUEST_STATUS } = require("../constants/extensionRequests");
6
6
const { INTERNAL_SERVER_ERROR } = require ( "../constants/errorMessages" ) ;
7
7
const { transformQuery } = require ( "../utils/extensionRequests" ) ;
8
8
const { parseQueryParams } = require ( "../utils/queryParser" ) ;
9
+ const logsQuery = require ( "../models/logs" ) ;
10
+ const { getFullName } = require ( "../utils/users" ) ;
9
11
10
12
/**
11
13
* Create ETA extension Request
@@ -232,6 +234,23 @@ const getSelfExtensionRequests = async (req, res) => {
232
234
if ( latestExtensionRequest && latestExtensionRequest . assigneeId !== userId ) {
233
235
allExtensionRequests = [ ] ;
234
236
} else {
237
+ // Add reviewer's name if status is not PENDING
238
+ if ( latestExtensionRequest . status === "APPROVED" || latestExtensionRequest . status === "DENIED" ) {
239
+ const logs = await logsQuery . fetchLogs (
240
+ { "meta.extensionRequestId" : latestExtensionRequest . id , limit : 1 } ,
241
+ "extensionRequests"
242
+ ) ;
243
+
244
+ if (
245
+ logs . length === 1 &&
246
+ logs [ 0 ] ?. meta ?. userId &&
247
+ ( logs [ 0 ] ?. body ?. status === "APPROVED" || logs [ 0 ] ?. body ?. status === "DENIED" ) // Make sure log is only related to status change
248
+ ) {
249
+ const superUserId = logs [ 0 ] . meta . userId ;
250
+ const name = await getFullName ( superUserId ) ;
251
+ latestExtensionRequest . reviewedBy = `${ name ?. first_name } ${ name ?. last_name } ` ;
252
+ }
253
+ }
235
254
allExtensionRequests = [ latestExtensionRequest ] ;
236
255
}
237
256
} else {
@@ -270,6 +289,7 @@ const getSelfExtensionRequests = async (req, res) => {
270
289
*/
271
290
const updateExtensionRequest = async ( req , res ) => {
272
291
try {
292
+ const { dev = "false" } = req . query ;
273
293
const extensionRequest = await extensionRequestsQuery . fetchExtensionRequest ( req . params . id ) ;
274
294
if ( ! extensionRequest . extensionRequestData ) {
275
295
return res . boom . notFound ( "Extension Request not found" ) ;
@@ -282,7 +302,39 @@ const updateExtensionRequest = async (req, res) => {
282
302
}
283
303
}
284
304
285
- await extensionRequestsQuery . updateExtensionRequest ( req . body , req . params . id ) ;
305
+ const promises = [ extensionRequestsQuery . updateExtensionRequest ( req . body , req . params . id ) ] ;
306
+ // If flag is present, then only create log for change in ETA/reason by SU
307
+ if ( dev === "true" ) {
308
+ let body = { } ;
309
+ // Check if reason has been changed
310
+ if ( req . body . reason && req . body . reason !== extensionRequest . extensionRequestData . reason ) {
311
+ body = { ...body , oldReason : extensionRequest . extensionRequestData . reason , newReason : req . body . reason } ;
312
+ }
313
+ // Check if newEndsOn has been changed
314
+ if ( req . body . newEndsOn && req . body . newEndsOn !== extensionRequest . extensionRequestData . newEndsOn ) {
315
+ body = { ...body , oldEndsOn : extensionRequest . extensionRequestData . newEndsOn , newEndsOn : req . body . newEndsOn } ;
316
+ }
317
+ // Check if title has been changed
318
+ if ( req . body . title && req . body . title !== extensionRequest . extensionRequestData . title ) {
319
+ body = { ...body , oldTitle : extensionRequest . extensionRequestData . title , newTitle : req . body . title } ;
320
+ }
321
+
322
+ // Validate if there's any update that actually happened, then only create the log
323
+ if ( Object . keys ( body ) . length > 0 ) {
324
+ const extensionLog = {
325
+ type : "extensionRequests" ,
326
+ meta : {
327
+ extensionRequestId : req . params . id ,
328
+ taskId : extensionRequest . extensionRequestData . taskId ,
329
+ userId : req . userData . id ,
330
+ } ,
331
+ body,
332
+ } ;
333
+ promises . push ( addLog ( extensionLog . type , extensionLog . meta , extensionLog . body ) ) ;
334
+ }
335
+ }
336
+ await Promise . all ( promises ) ;
337
+
286
338
return res . status ( 204 ) . send ( ) ;
287
339
} catch ( err ) {
288
340
logger . error ( `Error while updating extension request: ${ err } ` ) ;
@@ -298,6 +350,7 @@ const updateExtensionRequest = async (req, res) => {
298
350
*/
299
351
const updateExtensionRequestStatus = async ( req , res ) => {
300
352
try {
353
+ const { dev = "false" } = req . query ;
301
354
const extensionRequest = await extensionRequestsQuery . fetchExtensionRequest ( req . params . id ) ;
302
355
if ( ! extensionRequest . extensionRequestData ) {
303
356
return res . boom . notFound ( "Extension Request not found" ) ;
@@ -307,6 +360,7 @@ const updateExtensionRequestStatus = async (req, res) => {
307
360
const extensionLog = {
308
361
type : "extensionRequests" ,
309
362
meta : {
363
+ ...( dev === "true" && { extensionRequestId : req . params . id } ) , // if flag is present, add extensionRequestId
310
364
taskId : extensionRequest . extensionRequestData . taskId ,
311
365
username : req . userData . username ,
312
366
userId : req . userData . id ,
0 commit comments