import { Controller, Get, Param, ParseUUIDPipe, Query, UseGuards, } from '@nestjs/common'; import { ApiBearerAuth, ApiForbiddenResponse, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, ApiUnauthorizedResponse, } from '@nestjs/swagger'; import { CurrentUser } from '../../../common/decorators/current-user.decorator'; import type { AuthUser } from '../../../common/auth/auth-user'; import { Pagination, type PaginationResponse, PaginationMetaDto, } from '../../../common/http/response'; import { BEARER_AUTH_NAME } from '../../../common/swagger/setup-swagger'; import { RequireFieldPrivilege } from '../shared/field-privilege.decorator'; import { FieldPrivilegeGuard } from '../shared/field-privilege.guard'; import { CyclesService } from './cycles.service'; import { CycleDto, ListCyclesQueryDto } from './dto/cycle.dto'; @ApiTags('cycles') @ApiBearerAuth(BEARER_AUTH_NAME) @UseGuards(FieldPrivilegeGuard) @Controller('cycles') export class CyclesReadController { constructor(private readonly cyclesService: CyclesService) {} @Get() @Pagination() @RequireFieldPrivilege('cycle', 'view') @ApiOperation({ summary: 'List cycles' }) @ApiOkResponse({ schema: { properties: { data: { type: 'array', items: { $ref: '#/components/schemas/CycleDto' }, }, meta: { $ref: '#/components/schemas/PaginationMetaDto' }, }, }, }) @ApiUnauthorizedResponse() @ApiForbiddenResponse() list( @Query() query: ListCyclesQueryDto, @CurrentUser() user: AuthUser, ): Promise> { return this.cyclesService.list(query, user); } @Get(':id') @RequireFieldPrivilege('cycle', 'view') @ApiOperation({ summary: 'Get cycle detail' }) @ApiOkResponse({ type: CycleDto }) @ApiNotFoundResponse() @ApiUnauthorizedResponse() @ApiForbiddenResponse() findOne( @Param('id', ParseUUIDPipe) id: string, @CurrentUser() user: AuthUser, ): Promise { return this.cyclesService.findById(id, user); } } void PaginationMetaDto;