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
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

View file

@ -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 {

View file

@ -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<Record<TaskStatus, number>>(
(a, c) => Object.assign(a, { [c.taskStatus]: c._count }),
return task.reduce<Record<TaskOrderStatus, number>>(
(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) {