From ce51b8cc0f43f683cff70ec7999859719234f78c Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Mon, 23 Dec 2024 18:06:01 +0700 Subject: [PATCH] refactor: update status more accurate --- src/controllers/06-request-list-controller.ts | 58 ++++++++++++------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/src/controllers/06-request-list-controller.ts b/src/controllers/06-request-list-controller.ts index fa6bd24..747e473 100644 --- a/src/controllers/06-request-list-controller.ts +++ b/src/controllers/06-request-list-controller.ts @@ -184,28 +184,44 @@ export class RequestDataActionController extends Controller { @Post("cancel") @Security("keycloak") async cancelRequestData(@Path() requestDataId: string) { - await prisma.$transaction([ - prisma.requestData.update({ - where: { id: requestDataId }, - data: { - requestDataStatus: RequestDataStatus.Canceled, - }, - }), - prisma.requestWorkStepStatus.updateMany({ - where: { requestWork: { requestDataId } }, - data: { - workStatus: RequestWorkStatus.Canceled, - }, - }), - prisma.taskOrder.updateMany({ - where: { - taskList: { - every: { taskStatus: RequestWorkStatus.Canceled }, + await prisma.$transaction(async (tx) => { + const workStepCondition = { + requestWork: { requestDataId }, + workStatus: { notIn: [RequestWorkStatus.Completed, RequestWorkStatus.Ended] }, + }; + + await Promise.all([ + tx.requestData.update({ + where: { id: requestDataId }, + data: { + requestDataStatus: RequestDataStatus.Canceled, }, - }, - data: { taskOrderStatus: TaskStatus.Canceled }, - }), - ]); + }), + tx.requestWorkStepStatus.updateMany({ + where: workStepCondition, + data: { + workStatus: RequestWorkStatus.Canceled, + }, + }), + tx.task.updateMany({ + where: { + taskStatus: { notIn: [TaskStatus.Complete, TaskStatus.Redo] }, + requestWorkStep: workStepCondition, + }, + data: { taskStatus: TaskStatus.Canceled }, + }), + ]); + await Promise.all([ + tx.taskOrder.updateMany({ + where: { + taskList: { + every: { taskStatus: TaskStatus.Canceled }, + }, + }, + data: { taskOrderStatus: TaskStatus.Canceled }, + }), + ]); + }); } }