import { Controller, Get, Param, ParseUUIDPipe, Query } from '@nestjs/common'; import { ApiBearerAuth, ApiForbiddenResponse, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, ApiUnauthorizedResponse, } from '@nestjs/swagger'; import { CurrentUser } from '../../../common/decorators/current-user.decorator'; 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 { FIELD_VISIT_PRIVILEGE_KEY } from '../shared/field-purpose'; import { ListVisitsQueryDto, VisitDto } from './dto/visit.dto'; import { VisitsService } from './visits.service'; @ApiTags('visits') @ApiBearerAuth(BEARER_AUTH_NAME) @Controller('visits') export class VisitsReadController { constructor(private readonly visitsService: VisitsService) {} @Get('current') @RequirePrivilege(FIELD_VISIT_PRIVILEGE_KEY, 'view') @ApiOperation({ summary: 'Get the open visit for the current user' }) @ApiOkResponse({ type: VisitDto }) @ApiUnauthorizedResponse() @ApiForbiddenResponse() current(@CurrentUser('id') userId: string): Promise { return this.visitsService.findCurrent(userId); } @Get() @Pagination() @RequirePrivilege(FIELD_VISIT_PRIVILEGE_KEY, 'view') @ApiOperation({ summary: 'List visits' }) @ApiOkResponse({ schema: { properties: { data: { type: 'array', items: { $ref: '#/components/schemas/VisitDto' }, }, meta: { $ref: '#/components/schemas/PaginationMetaDto' }, }, }, }) @ApiUnauthorizedResponse() @ApiForbiddenResponse() list( @Query() query: ListVisitsQueryDto, ): Promise> { return this.visitsService.list(query); } @Get(':id') @RequirePrivilege(FIELD_VISIT_PRIVILEGE_KEY, 'view') @ApiOperation({ summary: 'Get visit detail' }) @ApiOkResponse({ type: VisitDto }) @ApiNotFoundResponse() @ApiUnauthorizedResponse() @ApiForbiddenResponse() findOne(@Param('id', ParseUUIDPipe) id: string): Promise { return this.visitsService.findById(id); } } void PaginationMetaDto;