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 { DivisionDto, ListDivisionsQueryDto } from './dto/division.dto'; import { DivisionsService } from './divisions.service'; export const DIVISION_PRIVILEGE_KEY = 'ADMIN.SETTINGS.DATA.DIVISION'; @ApiTags('divisions') @ApiBearerAuth(BEARER_AUTH_NAME) @Controller('divisions') export class DivisionsReadController { constructor(private readonly divisionsService: DivisionsService) {} @Get() @Pagination() @RequirePrivilege(DIVISION_PRIVILEGE_KEY, 'view') @ApiOperation({ summary: 'List divisions' }) @ApiOkResponse({ schema: { properties: { data: { type: 'array', items: { $ref: '#/components/schemas/DivisionDto' }, }, meta: { $ref: '#/components/schemas/PaginationMetaDto' }, }, }, }) @ApiUnauthorizedResponse() @ApiForbiddenResponse() list( @Query() query: ListDivisionsQueryDto, ): Promise> { return this.divisionsService.list(query); } @Get(':id') @RequirePrivilege(DIVISION_PRIVILEGE_KEY, 'view') @ApiOperation({ summary: 'Get division detail' }) @ApiOkResponse({ type: DivisionDto }) @ApiNotFoundResponse() @ApiUnauthorizedResponse() @ApiForbiddenResponse() findOne(@Param('id', ParseUUIDPipe) id: string): Promise { return this.divisionsService.findById(id); } } void PaginationMetaDto;