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";
import prisma from "../db";
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 {
branchRelationPermInclude,
@ -25,6 +31,7 @@ import {
import HttpError from "../interfaces/http-error";
import HttpStatus from "../interfaces/http-status";
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"];
@ -86,36 +93,38 @@ export class TaskController extends Controller {
@Query() query: string = "",
@Query() page = 1,
@Query() pageSize = 30,
@Query() assignedByUserId?: string,
@Query() assignedUserId?: string,
@Query() taskOrderStatus?: TaskOrderStatus,
@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([
prisma.taskOrder.findMany({
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 } },
],
},
where,
include: {
institution: true,
createdBy: true,
},
}),
prisma.taskOrder.count(),
prisma.taskOrder.count({ where }),
]);
return { result, total, page, pageSize };
@ -126,14 +135,14 @@ export class TaskController extends Controller {
async getTaskOrder(
@Request() req: RequestWithUser,
@Path() taskId: string,
@Query() taskAssignedByUserId?: string,
@Query() taskAssignedUserId?: string,
) {
const record = await prisma.taskOrder.findFirst({
where: { id: taskId, registeredBranch: { OR: permissionCondCompany(req.user) } },
include: {
taskList: {
where: {
requestWorkStep: { responsibleUserId: taskAssignedByUserId },
requestWorkStep: { responsibleUserId: taskAssignedUserId },
},
include: {
requestWorkStep: {
@ -379,6 +388,12 @@ export class TaskActionController extends Controller {
where: { id: taskId },
data: {
taskOrderStatus: TaskOrderStatus.InProgress,
userTask: {
create: {
userId: req.user.sub,
userTaskStatus: UserTaskStatus.Accept,
},
},
},
}),
prisma.task.updateMany({
@ -487,3 +502,56 @@ export class TaskOrderAttachmentController extends Controller {
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 };
}
}