From 46a16cf697b55e34b0de93d94271513bca6b1b2f Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Tue, 10 Dec 2024 10:03:51 +0700 Subject: [PATCH] feat: update task relation --- prisma/schema.prisma | 35 +++-- src/controllers/06-request-list-controller.ts | 11 +- src/controllers/07-task-controller.ts | 130 ++++++++++-------- 3 files changed, 105 insertions(+), 71 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 9850527..af8ce13 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1428,8 +1428,6 @@ enum RequestWorkStatus { Validate Ended Completed - - Redo Canceled } @@ -1470,13 +1468,12 @@ model RequestWorkStepStatus { responsibleUserId String? responsibleUser User? @relation(fields: [responsibleUserId], references: [id]) - taskOrder TaskOrder? @relation(fields: [taskOrderId], references: [id], onDelete: SetNull) - taskOrderId String? + task Task[] @@id([step, requestWorkId]) } -enum TaskStatus { +enum TaskOrderStatus { Pending InProgress Validate @@ -1484,14 +1481,36 @@ enum TaskStatus { Canceled } +enum TaskStatus { + Pending + InProgress + Validate + Complete + Redo + Canceled +} + +model Task { + id String @id @default(cuid()) + + taskStatus TaskStatus @default(Pending) + + step Int + requestWorkId String + requestWorkStep RequestWorkStepStatus @relation(fields: [step, requestWorkId], references: [step, requestWorkId]) + + taskOrder TaskOrder @relation(fields: [taskOrderId], references: [id]) + taskOrderId String +} + model TaskOrder { id String @id @default(cuid()) code String - taskName String - taskStatus TaskStatus @default(Pending) - taskList RequestWorkStepStatus[] + taskName String + taskOrderStatus TaskOrderStatus @default(Pending) + taskList Task[] contactName String contactTel String diff --git a/src/controllers/06-request-list-controller.ts b/src/controllers/06-request-list-controller.ts index a62ac5a..c96cf25 100644 --- a/src/controllers/06-request-list-controller.ts +++ b/src/controllers/06-request-list-controller.ts @@ -196,10 +196,10 @@ export class RequestDataActionController extends Controller { prisma.taskOrder.updateMany({ where: { taskList: { - every: { workStatus: RequestWorkStatus.Canceled }, + every: { taskStatus: RequestWorkStatus.Canceled }, }, }, - data: { taskStatus: TaskStatus.Canceled }, + data: { taskOrderStatus: TaskStatus.Canceled }, }), ]); } @@ -223,7 +223,12 @@ export class RequestListController extends Controller { if (readyToTask) { statusCondition = { some: { - OR: [{ workStatus: RequestWorkStatus.Ready }, { workStatus: RequestWorkStatus.Redo }], + OR: [ + { workStatus: RequestWorkStatus.Ready }, + { + task: { some: { taskStatus: TaskStatus.Redo } }, + }, + ], }, }; } else { diff --git a/src/controllers/07-task-controller.ts b/src/controllers/07-task-controller.ts index 131ca06..bde6710 100644 --- a/src/controllers/07-task-controller.ts +++ b/src/controllers/07-task-controller.ts @@ -15,7 +15,7 @@ import { } from "tsoa"; import prisma from "../db"; import { notFoundError } from "../utils/error"; -import { TaskStatus } from "@prisma/client"; +import { TaskOrderStatus, TaskStatus } from "@prisma/client"; import { RequestWithUser } from "../interfaces/user"; import { branchRelationPermInclude, @@ -44,17 +44,17 @@ export class TaskController extends Controller { @Get("stats") async getTaskOrderStats() { const task = await prisma.taskOrder.groupBy({ - by: ["taskStatus"], + by: ["taskOrderStatus"], _count: true, }); - return task.reduce>( - (a, c) => Object.assign(a, { [c.taskStatus]: c._count }), + return task.reduce>( + (a, c) => Object.assign(a, { [c.taskOrderStatus]: c._count }), { - [TaskStatus.Pending]: 0, - [TaskStatus.InProgress]: 0, - [TaskStatus.Validate]: 0, - [TaskStatus.Complete]: 0, - [TaskStatus.Canceled]: 0, + [TaskOrderStatus.Pending]: 0, + [TaskOrderStatus.InProgress]: 0, + [TaskOrderStatus.Validate]: 0, + [TaskOrderStatus.Complete]: 0, + [TaskOrderStatus.Canceled]: 0, }, ); } @@ -66,9 +66,9 @@ export class TaskController extends Controller { @Query() query: string = "", @Query() page = 1, @Query() pageSize = 30, - @Query() taskStatus?: TaskStatus, + @Query() taskOrderStatus?: TaskOrderStatus, ) { - return this.getTaskOrderListByCriteria(req, query, page, pageSize, taskStatus); + return this.getTaskOrderListByCriteria(req, query, page, pageSize, taskOrderStatus); } @Post("list") @@ -78,13 +78,13 @@ export class TaskController extends Controller { @Query() query: string = "", @Query() page = 1, @Query() pageSize = 30, - @Query() taskStatus?: TaskStatus, + @Query() taskOrderStatus?: TaskOrderStatus, @Body() body?: { code?: string[] }, ) { const [result, total] = await prisma.$transaction([ prisma.taskOrder.findMany({ where: { - taskStatus, + taskOrderStatus, registeredBranch: { OR: permissionCondCompany(req.user) }, code: body?.code ? { in: body.code } : undefined, OR: [ @@ -113,19 +113,23 @@ export class TaskController extends Controller { include: { taskList: { include: { - requestWork: { + requestWorkStep: { include: { - request: { + requestWork: { include: { - employee: true, - quotation: true, - }, - }, - productService: { - include: { - service: true, - work: true, - product: true, + request: { + include: { + employee: true, + quotation: true, + }, + }, + productService: { + include: { + service: true, + work: true, + product: true, + }, + }, }, }, }, @@ -201,19 +205,23 @@ export class TaskController extends Controller { include: { taskList: { include: { - requestWork: { + requestWorkStep: { include: { - request: { + requestWork: { include: { - employee: true, - quotation: true, - }, - }, - productService: { - include: { - service: true, - work: true, - product: true, + request: { + include: { + employee: true, + quotation: true, + }, + }, + productService: { + include: { + service: true, + work: true, + product: true, + }, + }, }, }, }, @@ -228,9 +236,7 @@ export class TaskController extends Controller { code, registeredBranchId: userAffiliatedBranch.id, createdByUserId: req.user.sub, - taskList: { - connect: taskList.map((v) => ({ step_requestWorkId: v })), - }, + taskList: { create: taskList }, }, }); }); @@ -244,7 +250,7 @@ export class TaskController extends Controller { @Body() body: { taskName: string; - taskStatus: TaskStatus; + taskOrderStatus: TaskOrderStatus; contactName: string; contactTel: string; @@ -259,7 +265,11 @@ export class TaskController extends Controller { include: { registeredBranch: { include: branchRelationPermInclude(req.user) }, taskList: { - include: { requestWork: true }, + include: { + requestWorkStep: { + include: { requestWork: true }, + }, + }, }, institution: true, createdBy: true, @@ -275,7 +285,11 @@ export class TaskController extends Controller { include: { taskList: { include: { - requestWork: true, + requestWorkStep: { + include: { + requestWork: true, + }, + }, }, }, institution: true, @@ -285,20 +299,16 @@ export class TaskController extends Controller { data: { ...body, taskList: { - disconnect: record?.taskList - .filter( - (lhs) => - !body.taskList.find( - (rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step, - ), - ) - .map((v) => ({ - step_requestWorkId: { - requestWorkId: v.requestWorkId, - step: v.step, - }, - })), - connect: body.taskList.map((v) => ({ step_requestWorkId: v })), + deleteMany: record?.taskList.filter( + (lhs) => + !body.taskList.find( + (rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step, + ), + ), + createMany: { + data: body.taskList, + skipDuplicates: true, + }, }, }, }); @@ -345,13 +355,13 @@ export class TaskActionController extends Controller { await tx.taskOrder.update({ where: { id: taskId }, data: { - taskStatus: "InProgress", + taskOrderStatus: TaskOrderStatus.InProgress, }, }); - await tx.requestWorkStepStatus.updateMany({ + await tx.task.updateMany({ where: { taskOrderId: taskId }, data: { - workStatus: "InProgress", + taskStatus: TaskStatus.InProgress, }, }); await tx.requestData.updateMany({ @@ -359,7 +369,7 @@ export class TaskActionController extends Controller { requestWork: { some: { stepStatus: { - some: { taskOrderId: taskId }, + some: { task: { some: { taskOrderId: taskId } } }, }, }, }, @@ -378,7 +388,7 @@ export class TaskActionController extends Controller { async completeTaskOrder(@Request() req: RequestWithUser, @Path() taskId: string) {} } -@Route("api/v1/task-order/{taskId}") +@Route("api/v1/task/{taskId}") @Tags("Task Order") export class TaskOrderAttachmentController extends Controller { private async checkPermission(user: RequestWithUser["user"], id: string) {