feat: update task relation

This commit is contained in:
Methapon2001 2024-12-10 10:03:51 +07:00
parent d58d88c0d4
commit 46a16cf697
3 changed files with 105 additions and 71 deletions

View file

@ -1428,8 +1428,6 @@ enum RequestWorkStatus {
Validate Validate
Ended Ended
Completed Completed
Redo
Canceled Canceled
} }
@ -1470,28 +1468,49 @@ model RequestWorkStepStatus {
responsibleUserId String? responsibleUserId String?
responsibleUser User? @relation(fields: [responsibleUserId], references: [id]) responsibleUser User? @relation(fields: [responsibleUserId], references: [id])
taskOrder TaskOrder? @relation(fields: [taskOrderId], references: [id], onDelete: SetNull) task Task[]
taskOrderId String?
@@id([step, requestWorkId]) @@id([step, requestWorkId])
} }
enum TaskOrderStatus {
Pending
InProgress
Validate
Complete
Canceled
}
enum TaskStatus { enum TaskStatus {
Pending Pending
InProgress InProgress
Validate Validate
Complete Complete
Redo
Canceled 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 { model TaskOrder {
id String @id @default(cuid()) id String @id @default(cuid())
code String code String
taskName String taskName String
taskStatus TaskStatus @default(Pending) taskOrderStatus TaskOrderStatus @default(Pending)
taskList RequestWorkStepStatus[] taskList Task[]
contactName String contactName String
contactTel String contactTel String

View file

@ -196,10 +196,10 @@ export class RequestDataActionController extends Controller {
prisma.taskOrder.updateMany({ prisma.taskOrder.updateMany({
where: { where: {
taskList: { 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) { if (readyToTask) {
statusCondition = { statusCondition = {
some: { some: {
OR: [{ workStatus: RequestWorkStatus.Ready }, { workStatus: RequestWorkStatus.Redo }], OR: [
{ workStatus: RequestWorkStatus.Ready },
{
task: { some: { taskStatus: TaskStatus.Redo } },
},
],
}, },
}; };
} else { } else {

View file

@ -15,7 +15,7 @@ import {
} from "tsoa"; } from "tsoa";
import prisma from "../db"; import prisma from "../db";
import { notFoundError } from "../utils/error"; import { notFoundError } from "../utils/error";
import { TaskStatus } from "@prisma/client"; import { TaskOrderStatus, TaskStatus } from "@prisma/client";
import { RequestWithUser } from "../interfaces/user"; import { RequestWithUser } from "../interfaces/user";
import { import {
branchRelationPermInclude, branchRelationPermInclude,
@ -44,17 +44,17 @@ export class TaskController extends Controller {
@Get("stats") @Get("stats")
async getTaskOrderStats() { async getTaskOrderStats() {
const task = await prisma.taskOrder.groupBy({ const task = await prisma.taskOrder.groupBy({
by: ["taskStatus"], by: ["taskOrderStatus"],
_count: true, _count: true,
}); });
return task.reduce<Record<TaskStatus, number>>( return task.reduce<Record<TaskOrderStatus, number>>(
(a, c) => Object.assign(a, { [c.taskStatus]: c._count }), (a, c) => Object.assign(a, { [c.taskOrderStatus]: c._count }),
{ {
[TaskStatus.Pending]: 0, [TaskOrderStatus.Pending]: 0,
[TaskStatus.InProgress]: 0, [TaskOrderStatus.InProgress]: 0,
[TaskStatus.Validate]: 0, [TaskOrderStatus.Validate]: 0,
[TaskStatus.Complete]: 0, [TaskOrderStatus.Complete]: 0,
[TaskStatus.Canceled]: 0, [TaskOrderStatus.Canceled]: 0,
}, },
); );
} }
@ -66,9 +66,9 @@ export class TaskController extends Controller {
@Query() query: string = "", @Query() query: string = "",
@Query() page = 1, @Query() page = 1,
@Query() pageSize = 30, @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") @Post("list")
@ -78,13 +78,13 @@ export class TaskController extends Controller {
@Query() query: string = "", @Query() query: string = "",
@Query() page = 1, @Query() page = 1,
@Query() pageSize = 30, @Query() pageSize = 30,
@Query() taskStatus?: TaskStatus, @Query() taskOrderStatus?: TaskOrderStatus,
@Body() body?: { code?: string[] }, @Body() body?: { code?: string[] },
) { ) {
const [result, total] = await prisma.$transaction([ const [result, total] = await prisma.$transaction([
prisma.taskOrder.findMany({ prisma.taskOrder.findMany({
where: { where: {
taskStatus, taskOrderStatus,
registeredBranch: { OR: permissionCondCompany(req.user) }, registeredBranch: { OR: permissionCondCompany(req.user) },
code: body?.code ? { in: body.code } : undefined, code: body?.code ? { in: body.code } : undefined,
OR: [ OR: [
@ -112,6 +112,8 @@ export class TaskController extends Controller {
where: { id: taskId, registeredBranch: { OR: permissionCondCompany(req.user) } }, where: { id: taskId, registeredBranch: { OR: permissionCondCompany(req.user) } },
include: { include: {
taskList: { taskList: {
include: {
requestWorkStep: {
include: { include: {
requestWork: { requestWork: {
include: { include: {
@ -132,6 +134,8 @@ export class TaskController extends Controller {
}, },
}, },
}, },
},
},
institution: true, institution: true,
createdBy: true, createdBy: true,
}, },
@ -200,6 +204,8 @@ export class TaskController extends Controller {
return await tx.taskOrder.create({ return await tx.taskOrder.create({
include: { include: {
taskList: { taskList: {
include: {
requestWorkStep: {
include: { include: {
requestWork: { requestWork: {
include: { include: {
@ -220,6 +226,8 @@ export class TaskController extends Controller {
}, },
}, },
}, },
},
},
institution: true, institution: true,
createdBy: true, createdBy: true,
}, },
@ -228,9 +236,7 @@ export class TaskController extends Controller {
code, code,
registeredBranchId: userAffiliatedBranch.id, registeredBranchId: userAffiliatedBranch.id,
createdByUserId: req.user.sub, createdByUserId: req.user.sub,
taskList: { taskList: { create: taskList },
connect: taskList.map((v) => ({ step_requestWorkId: v })),
},
}, },
}); });
}); });
@ -244,7 +250,7 @@ export class TaskController extends Controller {
@Body() @Body()
body: { body: {
taskName: string; taskName: string;
taskStatus: TaskStatus; taskOrderStatus: TaskOrderStatus;
contactName: string; contactName: string;
contactTel: string; contactTel: string;
@ -259,8 +265,12 @@ export class TaskController extends Controller {
include: { include: {
registeredBranch: { include: branchRelationPermInclude(req.user) }, registeredBranch: { include: branchRelationPermInclude(req.user) },
taskList: { taskList: {
include: {
requestWorkStep: {
include: { requestWork: true }, include: { requestWork: true },
}, },
},
},
institution: true, institution: true,
createdBy: true, createdBy: true,
}, },
@ -274,10 +284,14 @@ export class TaskController extends Controller {
where: { id: taskId }, where: { id: taskId },
include: { include: {
taskList: { taskList: {
include: {
requestWorkStep: {
include: { include: {
requestWork: true, requestWork: true,
}, },
}, },
},
},
institution: true, institution: true,
registeredBranch: true, registeredBranch: true,
createdBy: true, createdBy: true,
@ -285,20 +299,16 @@ export class TaskController extends Controller {
data: { data: {
...body, ...body,
taskList: { taskList: {
disconnect: record?.taskList deleteMany: record?.taskList.filter(
.filter(
(lhs) => (lhs) =>
!body.taskList.find( !body.taskList.find(
(rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step, (rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step,
), ),
) ),
.map((v) => ({ createMany: {
step_requestWorkId: { data: body.taskList,
requestWorkId: v.requestWorkId, skipDuplicates: true,
step: v.step,
}, },
})),
connect: body.taskList.map((v) => ({ step_requestWorkId: v })),
}, },
}, },
}); });
@ -345,13 +355,13 @@ export class TaskActionController extends Controller {
await tx.taskOrder.update({ await tx.taskOrder.update({
where: { id: taskId }, where: { id: taskId },
data: { data: {
taskStatus: "InProgress", taskOrderStatus: TaskOrderStatus.InProgress,
}, },
}); });
await tx.requestWorkStepStatus.updateMany({ await tx.task.updateMany({
where: { taskOrderId: taskId }, where: { taskOrderId: taskId },
data: { data: {
workStatus: "InProgress", taskStatus: TaskStatus.InProgress,
}, },
}); });
await tx.requestData.updateMany({ await tx.requestData.updateMany({
@ -359,7 +369,7 @@ export class TaskActionController extends Controller {
requestWork: { requestWork: {
some: { some: {
stepStatus: { 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) {} async completeTaskOrder(@Request() req: RequestWithUser, @Path() taskId: string) {}
} }
@Route("api/v1/task-order/{taskId}") @Route("api/v1/task/{taskId}")
@Tags("Task Order") @Tags("Task Order")
export class TaskOrderAttachmentController extends Controller { export class TaskOrderAttachmentController extends Controller {
private async checkPermission(user: RequestWithUser["user"], id: string) { private async checkPermission(user: RequestWithUser["user"], id: string) {