diff --git a/src/controllers/04-product-controller.ts b/src/controllers/04-product-controller.ts index c1c40d8..612275e 100644 --- a/src/controllers/04-product-controller.ts +++ b/src/controllers/04-product-controller.ts @@ -31,6 +31,7 @@ import { isUsedError, notFoundError, relationError } from "../utils/error"; import { queryOrNot, whereDateQuery } from "../utils/relation"; import spreadsheet from "../utils/spreadsheet"; import flowAccount from "../services/flowaccount"; +import { json2csv } from "json-2-csv"; const MANAGE_ROLES = [ "system", @@ -673,3 +674,43 @@ export class ProductFileController extends Controller { return await deleteFile(fileLocation.product.img(productId, name)); } } + +@Route("api/v1/product-export") +@Tags("Product") +export class ProductExportController extends ProductController { + @Get() + @Security("keycloak") + async exportCustomer( + @Request() req: RequestWithUser, + @Query() status?: Status, + @Query() shared?: boolean, + @Query() productGroupId?: string, + @Query() query: string = "", + @Query() page: number = 1, + @Query() pageSize: number = 30, + @Query() orderField?: keyof Product, + @Query() orderBy?: "asc" | "desc", + @Query() activeOnly?: boolean, + @Query() startDate?: Date, + @Query() endDate?: Date, + ) { + const ret = await this.getProduct( + req, + status, + shared, + productGroupId, + query, + page, + pageSize, + orderField, + orderBy, + activeOnly, + startDate, + endDate, + ); + + this.setHeader("Content-Type", "text/csv"); + + return json2csv(ret.result, { useDateIso8601Format: true, expandNestedObjects: true }); + } +}