refactor: separate endpoint for accepted user task

This commit is contained in:
Methapon2001 2024-12-11 14:43:47 +07:00
parent 7a81c614c1
commit e2e97b30f0

View file

@ -15,7 +15,13 @@ import {
} from "tsoa"; } from "tsoa";
import prisma from "../db"; import prisma from "../db";
import { notFoundError } from "../utils/error"; import { notFoundError } from "../utils/error";
import { RequestDataStatus, TaskOrderStatus, TaskStatus } from "@prisma/client"; import {
Prisma,
RequestDataStatus,
TaskOrderStatus,
TaskStatus,
UserTaskStatus,
} from "@prisma/client";
import { RequestWithUser } from "../interfaces/user"; import { RequestWithUser } from "../interfaces/user";
import { import {
branchRelationPermInclude, branchRelationPermInclude,
@ -25,6 +31,7 @@ import {
import HttpError from "../interfaces/http-error"; import HttpError from "../interfaces/http-error";
import HttpStatus from "../interfaces/http-status"; import HttpStatus from "../interfaces/http-status";
import { deleteFile, fileLocation, getFile, getPresigned, listFile, setFile } from "../utils/minio"; import { deleteFile, fileLocation, getFile, getPresigned, listFile, setFile } from "../utils/minio";
import { queryOrNot } from "../utils/relation";
const MANAGE_ROLES = ["system", "head_of_admin", "admin", "document_checker"]; const MANAGE_ROLES = ["system", "head_of_admin", "admin", "document_checker"];
@ -86,36 +93,38 @@ export class TaskController extends Controller {
@Query() query: string = "", @Query() query: string = "",
@Query() page = 1, @Query() page = 1,
@Query() pageSize = 30, @Query() pageSize = 30,
@Query() assignedByUserId?: string, @Query() assignedUserId?: string,
@Query() taskOrderStatus?: TaskOrderStatus, @Query() taskOrderStatus?: TaskOrderStatus,
@Body() body?: { code?: string[] }, @Body() body?: { code?: string[] },
) { ) {
const where = {
taskOrderStatus,
registeredBranch: { OR: permissionCondCompany(req.user) },
taskList: assignedUserId
? {
some: {
requestWorkStep: { responsibleUserId: assignedUserId },
},
}
: undefined,
code: body?.code ? { in: body.code } : undefined,
OR: queryOrNot(query, [
{ code: { contains: query, mode: "insensitive" } },
{ taskName: { contains: query } },
{ contactName: { contains: query } },
{ contactTel: { contains: query } },
]),
} satisfies Prisma.TaskOrderWhereInput;
const [result, total] = await prisma.$transaction([ const [result, total] = await prisma.$transaction([
prisma.taskOrder.findMany({ prisma.taskOrder.findMany({
where: { where,
taskOrderStatus,
registeredBranch: { OR: permissionCondCompany(req.user) },
taskList: assignedByUserId
? {
some: {
requestWorkStep: { responsibleUserId: assignedByUserId },
},
}
: undefined,
code: body?.code ? { in: body.code } : undefined,
OR: [
{ code: { contains: query, mode: "insensitive" } },
{ taskName: { contains: query } },
{ contactName: { contains: query } },
{ contactTel: { contains: query } },
],
},
include: { include: {
institution: true, institution: true,
createdBy: true, createdBy: true,
}, },
}), }),
prisma.taskOrder.count(), prisma.taskOrder.count({ where }),
]); ]);
return { result, total, page, pageSize }; return { result, total, page, pageSize };
@ -126,14 +135,14 @@ export class TaskController extends Controller {
async getTaskOrder( async getTaskOrder(
@Request() req: RequestWithUser, @Request() req: RequestWithUser,
@Path() taskId: string, @Path() taskId: string,
@Query() taskAssignedByUserId?: string, @Query() taskAssignedUserId?: string,
) { ) {
const record = await prisma.taskOrder.findFirst({ const record = await prisma.taskOrder.findFirst({
where: { id: taskId, registeredBranch: { OR: permissionCondCompany(req.user) } }, where: { id: taskId, registeredBranch: { OR: permissionCondCompany(req.user) } },
include: { include: {
taskList: { taskList: {
where: { where: {
requestWorkStep: { responsibleUserId: taskAssignedByUserId }, requestWorkStep: { responsibleUserId: taskAssignedUserId },
}, },
include: { include: {
requestWorkStep: { requestWorkStep: {
@ -379,6 +388,12 @@ export class TaskActionController extends Controller {
where: { id: taskId }, where: { id: taskId },
data: { data: {
taskOrderStatus: TaskOrderStatus.InProgress, taskOrderStatus: TaskOrderStatus.InProgress,
userTask: {
create: {
userId: req.user.sub,
userTaskStatus: UserTaskStatus.Accept,
},
},
}, },
}), }),
prisma.task.updateMany({ prisma.task.updateMany({
@ -487,3 +502,56 @@ export class TaskOrderAttachmentController extends Controller {
return await deleteFile(fileLocation.task.attachment(taskId, name)); return await deleteFile(fileLocation.task.attachment(taskId, name));
} }
} }
@Route("api/v1/user-task")
@Tags("Task Order")
export class UserTaskController extends Controller {
@Get()
@Security("keycloak")
async getUserTask(
@Request() req: RequestWithUser,
@Query() query: string = "",
@Query() page = 1,
@Query() pageSize = 30,
@Query() userTaskStatus?: UserTaskStatus,
) {
const where = {
taskList: {
some: {
requestWorkStep: { responsibleUserId: req.user.sub },
},
},
userTask: userTaskStatus
? {
some:
userTaskStatus !== UserTaskStatus.Pending
? {
userTaskStatus,
userId: req.user.sub,
}
: undefined,
none: userTaskStatus === UserTaskStatus.Pending ? { userId: req.user.sub } : undefined,
}
: undefined,
OR: queryOrNot(query, [
{ code: { contains: query, mode: "insensitive" } },
{ taskName: { contains: query } },
{ contactName: { contains: query } },
{ contactTel: { contains: query } },
]),
} satisfies Prisma.TaskOrderWhereInput;
const [result, total] = await prisma.$transaction([
prisma.taskOrder.findMany({
where,
include: {
institution: true,
createdBy: true,
},
}),
prisma.taskOrder.count({ where }),
]);
return { result, page, pageSize, total };
}
}