feat: add stats by status
This commit is contained in:
parent
e655bf282c
commit
22b3981aa7
1 changed files with 31 additions and 1 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
import { Body, Controller, Get, Path, Put, Query, Request, Route, Security, Tags } from "tsoa";
|
import { Body, Controller, Get, Path, Put, Query, Request, Route, Security, Tags } from "tsoa";
|
||||||
import { RequestWithUser } from "../interfaces/user";
|
import { RequestWithUser } from "../interfaces/user";
|
||||||
import prisma from "../db";
|
import prisma from "../db";
|
||||||
import { Prisma, RequestWorkStatus } from "@prisma/client";
|
import { Prisma, RequestDataStatus, RequestWorkStatus } from "@prisma/client";
|
||||||
import { createPermCondition } from "../services/permission";
|
import { createPermCondition } from "../services/permission";
|
||||||
|
|
||||||
// User in company can see.
|
// User in company can see.
|
||||||
|
|
@ -10,12 +10,42 @@ const permissionCond = createPermCondition((_) => true);
|
||||||
@Route("/api/v1/request-data")
|
@Route("/api/v1/request-data")
|
||||||
@Tags("Request List")
|
@Tags("Request List")
|
||||||
export class RequestDataController extends Controller {
|
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()
|
@Get()
|
||||||
@Security("keycloak")
|
@Security("keycloak")
|
||||||
async getRequestDataList(
|
async getRequestDataList(
|
||||||
@Request() req: RequestWithUser,
|
@Request() req: RequestWithUser,
|
||||||
@Query() page: number = 1,
|
@Query() page: number = 1,
|
||||||
@Query() pageSize: number = 30,
|
@Query() pageSize: number = 30,
|
||||||
|
@Query() query: string = "",
|
||||||
) {
|
) {
|
||||||
const where = {
|
const where = {
|
||||||
quotation: {
|
quotation: {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue