diff --git a/src/controllers/04-product-service-controller.ts b/src/controllers/04-product-service-controller.ts deleted file mode 100644 index e5d09cc..0000000 --- a/src/controllers/04-product-service-controller.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { Controller, Get, Query, Route, Security } from "tsoa"; -import { sql } from "kysely"; - -import prisma from "../db"; - -@Route("/api/v1/product-service") -export class ProductServiceController extends Controller { - @Get() - @Security("keycloak") - async getProductService( - @Query() status?: "ACTIVE" | "INACTIVE", - @Query() query = "", - @Query() productGroupId?: string, - @Query() page: number = 1, - @Query() pageSize: number = 30, - @Query() registeredBranchId?: string, - ) { - const union = prisma.$kysely - .selectFrom((eb) => - eb - .selectFrom("Product") - .select([ - "id", - "code", - "name", - "detail", - "price", - "agentPrice", - "serviceCharge", - "process", - "remark", - "status", - "statusOrder", - "productGroupId", - "registeredBranchId", - "createdByUserId", - "createdAt", - "updatedByUserId", - "updatedAt", - sql`'product'`.as("type"), - ]) - .union((eb) => - eb - .selectFrom("Service") - .select([ - "id", - "code", - "name", - "detail", - sql`-1`.as("price"), - sql`-1`.as("agentPrice"), - sql`-1`.as("serviceCharge"), - sql`-1`.as("process"), - sql`''`.as("remark"), - "status", - "statusOrder", - "productGroupId", - "registeredBranchId", - "createdByUserId", - "createdAt", - "updatedByUserId", - "updatedAt", - sql`'service'`.as("type"), - ]), - ) - .as("p"), - ) - .where((eb) => { - const condStatus = status ? eb("status", "=", status) : undefined; - const condQuery = query ? eb("name", "like", `%${query}%`) : undefined; - const condProductGroupId = productGroupId - ? eb("productGroupId", "=", productGroupId) - : undefined; - const condRegisteredBranchId = registeredBranchId - ? eb("registeredBranchId", "=", registeredBranchId).or("registeredBranchId", "is", null) - : undefined; - - return eb.and( - [condStatus, condQuery, condProductGroupId, condRegisteredBranchId].filter((v) => !!v), - ); - }); - - const record = await union - .selectAll() - .orderBy("statusOrder asc") - .orderBy("createdAt asc") - .limit(pageSize) - .offset((page - 1) * pageSize) - .execute(); - const count = await union - .select((eb) => eb.fn.count("id").as("total")) - .executeTakeFirst(); - - const work = await prisma.work.findMany({ - where: { serviceId: { in: record.flatMap((v) => (v.type === "service" ? v.id : [])) } }, - }); - - return { - result: record.map((v) => - v.type === "service" ? { ...v, work: work.filter((w) => w.serviceId === v.id) || [] } : v, - ), - page, - pageSize, - total: +String(count?.total || 0), - }; - } -}