@@ -187,7 +187,28 @@ const fetchTaskRequestById = async (taskRequestId) => {
187
187
} ;
188
188
} ;
189
189
190
- const createRequest = async ( data , authenticatedUsername ) => {
190
+ /**
191
+ * Creates a task request with user details.
192
+ *
193
+ * @param {Object } data - The data for creating the task request.
194
+ * @param {string } data.userId - The ID of the user to whom the task request is being created.
195
+ * @param {string } data.proposedDeadline - The proposed deadline for the task.
196
+ * @param {string } data.proposedStartDate - The proposed start date for the task.
197
+ * @param {string } data.description - The description of the task request.
198
+ * @param {string } data.taskTitle - The title of the task.
199
+ * @param {string } data.taskId - The ID of the task (optional).
200
+ * @param {string } data.externalIssueUrl - The external issue URL (optional).
201
+ * @param {string } data.requestType - The type of the task request (CREATION | ASSIGNMENT).
202
+ * @param {string } authorUserId - The ID of the authenticated user creating the request.
203
+ * @returns {Promise<{
204
+ * isCreationRequestApproved: boolean | undefined,
205
+ * alreadyRequesting: boolean | undefined,
206
+ * id: string,
207
+ * isCreate: boolean,
208
+ * taskRequest: Object,
209
+ * }>}
210
+ */
211
+ const createRequest = async ( data , authorUserId ) => {
191
212
try {
192
213
const queryFieldPath = data . requestType === TASK_REQUEST_TYPE . CREATION ? "externalIssueUrl" : "taskId" ;
193
214
const queryValue = data . requestType === TASK_REQUEST_TYPE . CREATION ? data . externalIssueUrl : data . taskId ;
@@ -233,7 +254,7 @@ const createRequest = async (data, authenticatedUsername) => {
233
254
const updatedTaskRequest = {
234
255
requestors : updatedRequestors ,
235
256
users : updatedUsers ,
236
- lastModifiedBy : authenticatedUsername ,
257
+ lastModifiedBy : authorUserId ,
237
258
lastModifiedAt : Date . now ( ) ,
238
259
} ;
239
260
await taskRequestsCollection . doc ( taskRequestRef . id ) . update ( updatedTaskRequest ) ;
@@ -254,9 +275,9 @@ const createRequest = async (data, authenticatedUsername) => {
254
275
externalIssueUrl : data . externalIssueUrl ,
255
276
requestType : data . requestType ,
256
277
users : [ userRequest ] ,
257
- createdBy : authenticatedUsername ,
278
+ createdBy : authorUserId ,
258
279
createdAt : Date . now ( ) ,
259
- lastModifiedBy : authenticatedUsername ,
280
+ lastModifiedBy : authorUserId ,
260
281
lastModifiedAt : Date . now ( ) ,
261
282
} ;
262
283
if ( ! newTaskRequest . externalIssueUrl ) delete newTaskRequest . externalIssueUrl ;
@@ -321,13 +342,20 @@ const addOrUpdate = async (taskId, userId) => {
321
342
} ;
322
343
323
344
/**
324
- * Approves task request to user
345
+ * Approve task request for a user.
325
346
*
326
- * @param taskRequestId { string }: id of task request
327
- * @param userId { Object }: user whose being approved
328
- * @return {Promise<{approvedTo: string, taskRequest: Object}> }
347
+ * @param {string } taskRequestId - The ID of the task request.
348
+ * @param {Object } user - The user to whom the task request is being approved.
349
+ * @param {string } authorUserId - The ID of the authenticated user performing the approval.
350
+ * @returns {Promise<{
351
+ * approvedTo: string,
352
+ * taskRequest: Object,
353
+ * taskRequestNotFound: boolean | undefined
354
+ * isUserInvalid: boolean | undefined
355
+ * isTaskRequestInvalid: boolean | undefined
356
+ * }>}
329
357
*/
330
- const approveTaskRequest = async ( taskRequestId , user ) => {
358
+ const approveTaskRequest = async ( taskRequestId , user , authorUserId ) => {
331
359
try {
332
360
return await firestore . runTransaction ( async ( transaction ) => {
333
361
const taskRequestDocRef = taskRequestsCollection . doc ( taskRequestId ) ;
@@ -364,6 +392,8 @@ const approveTaskRequest = async (taskRequestId, user) => {
364
392
users : taskRequestData . users ,
365
393
approvedTo : user . id ,
366
394
status : TASK_REQUEST_STATUS . APPROVED ,
395
+ lastModifiedBy : authorUserId ,
396
+ lastModifiedAt : Date . now ( ) ,
367
397
} ;
368
398
// End of TODO
369
399
const updateTaskRequestPromise = transaction . update ( taskRequestDocRef , updatedTaskRequest ) ;
@@ -397,6 +427,8 @@ const approveTaskRequest = async (taskRequestId, user) => {
397
427
const updatedTaskRequest = {
398
428
approvedTo : user . id ,
399
429
status : TASK_REQUEST_STATUS . APPROVED ,
430
+ lastModifiedBy : authorUserId ,
431
+ lastModifiedAt : Date . now ( ) ,
400
432
} ;
401
433
let userRequestData ;
402
434
if ( taskRequestData . users ) {
@@ -435,6 +467,38 @@ const approveTaskRequest = async (taskRequestId, user) => {
435
467
}
436
468
} ;
437
469
470
+ /**
471
+ * Rejects a task request.
472
+ *
473
+ * @param {string } taskRequestId - The ID of the task request.
474
+ * @param {string } authorUserId - The ID of the authenticated or logged in user performing the rejection.
475
+ * @returns {Promise<{taskRequest: Object
476
+ * taskRequestNotFound: boolean | undefined
477
+ * isTaskRequestInvalid: boolean | undefined
478
+ * }>}
479
+ */
480
+ const rejectTaskRequest = async ( taskRequestId , authorUserId ) => {
481
+ const taskRequestDoc = taskRequestsCollection . doc ( taskRequestId ) ;
482
+ const taskRequestData = ( await taskRequestDoc . get ( ) ) . data ( ) ;
483
+ if ( ! taskRequestData ) {
484
+ return { taskRequestNotFound : true } ;
485
+ }
486
+
487
+ if (
488
+ taskRequestData . status === TASK_REQUEST_STATUS . APPROVED ||
489
+ taskRequestData . status === TASK_REQUEST_STATUS . DENIED
490
+ ) {
491
+ return { isTaskRequestInvalid : true } ;
492
+ }
493
+ const updatedTaskRequest = {
494
+ status : TASK_REQUEST_STATUS . DENIED ,
495
+ lastModifiedBy : authorUserId ,
496
+ lastModifiedAt : Date . now ( ) ,
497
+ } ;
498
+ await taskRequestDoc . update ( updatedTaskRequest ) ;
499
+ return { taskRequest : { ...taskRequestData , ...updatedTaskRequest } } ;
500
+ } ;
501
+
438
502
const addNewFields = async ( ) => {
439
503
const taskRequestsSnapshots = ( await taskRequestsCollection . get ( ) ) . docs ;
440
504
@@ -506,4 +570,5 @@ module.exports = {
506
570
fetchPaginatedTaskRequests,
507
571
addNewFields,
508
572
removeOldField,
573
+ rejectTaskRequest,
509
574
} ;
0 commit comments