jws-backend/src/controllers/06-request-list-controller.ts
2024-10-10 16:43:09 +07:00

116 lines
2.6 KiB
TypeScript

import {
Body,
Controller,
Delete,
Get,
Path,
Put,
Query,
Request,
Route,
Security,
Tags,
} from "tsoa";
import { RequestWithUser } from "../interfaces/user";
import prisma from "../db";
import { Prisma, RequestWorkStatus } from "@prisma/client";
import { createPermCheck, createPermCondition } from "../services/permission";
// User in company can see.
const permissionCond = createPermCondition((_) => true);
@Route("api/v1/request-list")
@Tags("Request List")
export class RequestListController extends Controller {
@Get()
@Security("keycloak")
async getRequest(
@Request() req: RequestWithUser,
@Query() page: number = 1,
@Query() pageSize: number = 30,
) {
const where = {
request: {
quotation: {
customerBranch: {
customer: {
registeredBranch: { OR: permissionCond(req.user) },
},
},
},
},
} satisfies Prisma.RequestWorkWhereInput;
const [result, total] = await prisma.$transaction([
prisma.requestWork.findMany({
where,
include: {
request: {
include: {
quotation: true,
employee: true,
},
},
productService: {
include: {
service: true,
work: true,
product: true,
},
},
},
take: pageSize,
skip: (page - 1) * pageSize,
}),
prisma.requestWork.count({ where }),
]);
return { result, page, pageSize, total };
}
@Get("{requestId}")
async getRequestById(@Path() requestId: string) {
return await prisma.requestWork.findFirst({
include: {
request: {
include: {
quotation: true,
employee: true,
},
},
productService: {
include: {
service: true,
work: true,
product: true,
},
},
},
where: { id: requestId },
});
}
/** @todo */
@Put("{requestId}")
async updateRequestById(
@Request() req: RequestWithUser,
@Path() requestId: string,
@Body() payload: { status: RequestWorkStatus; attributes: Record<string, any> },
) {
const record = await prisma.requestWork.update({
where: { id: requestId },
data: {
workStatus: payload.status,
request: {
update: {
flow: payload.attributes,
},
},
},
});
return record;
}
}
export class RequestListAttachmentController extends Controller {}