MCPcopy Create free account
hub / github.com/RealDevSquad/website-backend / approveTaskRequest

Function approveTaskRequest

models/taskRequests.js:385–466  ·  view source on GitHub ↗
(taskRequestId, user, authorUserId)

Source from the content-addressed store, hash-verified

383 * }>}
384 */
385const approveTaskRequest = async (taskRequestId, user, authorUserId) => {
386 try {
387 return await firestore.runTransaction(async (transaction) => {
388 const taskRequestDocRef = taskRequestsCollection.doc(taskRequestId);
389 const taskRequestDoc = await transaction.get(taskRequestDocRef);
390 const taskRequestData = taskRequestDoc.data();
391 if (!taskRequestData) {
392 return { taskRequestNotFound: true };
393 }
394 let isUserInvalid;
395 if (taskRequestData.users) {
396 isUserInvalid = !taskRequestData.users.some((userElement) => user.id === userElement.userId);
397 } else {
398 isUserInvalid = !taskRequestData.requestors.some((userId) => user.id === userId);
399 }
400 if (isUserInvalid) {
401 return { isUserInvalid };
402 }
403 if (
404 taskRequestData.status === TASK_REQUEST_STATUS.APPROVED ||
405 taskRequestData.status === TASK_REQUEST_STATUS.DENIED
406 ) {
407 return { isTaskRequestInvalid: true };
408 }
409
410 let userRequestData;
411 if (taskRequestData.users) {
412 userRequestData = taskRequestData.users.find((userElement) => userElement.userId === user.id);
413 if (userRequestData) userRequestData.status = TASK_REQUEST_STATUS.APPROVED;
414 }
415
416 const updatedTaskRequest = {
417 users: taskRequestData.users,
418 approvedTo: user.id,
419 status: TASK_REQUEST_STATUS.APPROVED,
420 lastModifiedBy: authorUserId,
421 lastModifiedAt: Date.now(),
422 };
423
424 const currentEpochTime = getCurrentEpochTime();
425 const newTaskRequestData = {
426 assignee: user.id,
427 title: taskRequestData.taskTitle,
428 type: TASK_TYPE.FEATURE,
429 percentCompleted: 0,
430 status: TASK_STATUS.ASSIGNED,
431 priority: DEFAULT_TASK_PRIORITY,
432 createdAt: currentEpochTime,
433 updatedAt: currentEpochTime,
434 startedOn: convertMillisToSeconds(userRequestData?.createdAt || Date.now()),
435 endsOn: convertMillisToSeconds(userRequestData?.proposedDeadline || Date.now()),
436 github: {
437 issue: {
438 url: taskRequestData.externalIssueUrl,
439 html_url: taskRequestData.externalIssueHtmlUrl,
440 },
441 },
442 };

Callers 1

Calls 3

getCurrentEpochTimeFunction · 0.85
convertMillisToSecondsFunction · 0.85
getMethod · 0.80

Tested by

no test coverage detected