(taskRequestId, user, authorUserId)
| 383 | * }>} |
| 384 | */ |
| 385 | const 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 | }; |
no test coverage detected