feat: add stats by status

This commit is contained in:
Methapon Metanipat 2024-11-14 13:15:49 +07:00
parent e655bf282c
commit 22b3981aa7

View file

@ -1,7 +1,7 @@
import { Body, Controller, 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 { Prisma, RequestDataStatus, RequestWorkStatus } from "@prisma/client";
import { createPermCondition } from "../services/permission";
// User in company can see.
@ -10,12 +10,42 @@ const permissionCond = createPermCondition((_) => true);
@Route("/api/v1/request-data")
@Tags("Request List")
export class RequestDataController extends Controller {
@Get("stats")
@Security("keycloak")
async getRequestDataStats(@Request() req: RequestWithUser) {
const where = {
quotation: {
customerBranch: {
customer: {
registeredBranch: { OR: permissionCond(req.user) },
},
},
},
} satisfies Prisma.RequestDataWhereInput;
const list = await prisma.requestData.groupBy({
_count: true,
by: "requestDataStatus",
where: where,
});
return list.reduce<Record<RequestDataStatus, number>>(
(a, c) => Object.assign(a, { [c.requestDataStatus]: c._count }),
{
[RequestDataStatus.Pending]: 0,
[RequestDataStatus.InProgress]: 0,
[RequestDataStatus.Completed]: 0,
},
);
}
@Get()
@Security("keycloak")
async getRequestDataList(
@Request() req: RequestWithUser,
@Query() page: number = 1,
@Query() pageSize: number = 30,
@Query() query: string = "",
) {
const where = {
quotation: {