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 }, + }), + ]); + }); } }