import { Controller, Get, Param, ParseUUIDPipe, Query } from '@nestjs/common'; import { ApiBearerAuth, ApiForbiddenResponse, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, ApiUnauthorizedResponse, } from '@nestjs/swagger'; import { RequirePrivilege } from '../../../common/decorators/require-privilege.decorator'; import { Pagination, type PaginationResponse, PaginationMetaDto, } from '../../../common/http/response'; import { BEARER_AUTH_NAME } from '../../../common/swagger/setup-swagger'; import { SalesOrderDto, ListSalesOrdersQueryDto } from './dto/sales-order.dto'; import { SalesOrdersService } from './sales-orders.service'; export const SALES_ORDER_PRIVILEGE_KEYS = [ 'ADMIN.SALES.ACTIVITIES.ORDER', 'MOBILE.SALES.ORDER', ] as const; @ApiTags('sales-orders') @ApiBearerAuth(BEARER_AUTH_NAME) @Controller('sales-orders') export class SalesOrdersReadController { constructor(private readonly salesOrdersService: SalesOrdersService) {} @Get() @Pagination() @RequirePrivilege(SALES_ORDER_PRIVILEGE_KEYS, 'view') @ApiOperation({ summary: 'List sales orders' }) @ApiOkResponse({ schema: { properties: { data: { type: 'array', items: { $ref: '#/components/schemas/SalesOrderDto' }, }, meta: { $ref: '#/components/schemas/PaginationMetaDto' }, }, }, }) @ApiUnauthorizedResponse() @ApiForbiddenResponse() list( @Query() query: ListSalesOrdersQueryDto, ): Promise> { return this.salesOrdersService.list(query); } @Get(':id') @RequirePrivilege(SALES_ORDER_PRIVILEGE_KEYS, 'view') @ApiOperation({ summary: 'Get sales order detail' }) @ApiOkResponse({ type: SalesOrderDto }) @ApiNotFoundResponse() @ApiUnauthorizedResponse() @ApiForbiddenResponse() findOne(@Param('id', ParseUUIDPipe) id: string): Promise { return this.salesOrdersService.findById(id); } } void PaginationMetaDto;