refactor: separate endpoint for accepted user task
This commit is contained in:
parent
7a81c614c1
commit
e2e97b30f0
1 changed files with 91 additions and 23 deletions
|
|
@ -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 };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue