import { JwtAuthGuard } from '@clubpetrodev/authmodule'; import { MappedExceptionFilter } from '@clubpetrodev/nestjs-mapped-exception'; import { Controller, Get, HttpStatus, Query, UseFilters, UseGuards, UseInterceptors, } from '@nestjs/common'; import { ApiBearerAuth, ApiResponse, ApiTags } from '@nestjs/swagger'; import { FiltersInterceptor } from '../../interceptors/filters.interceptor'; import { TenantDto, TenantWithStoreDto } from '../common/dto/tenant.dto'; import { ComplianceService } from './compliance.service'; import { ComplianceSummaryResponseDto, UpcomingExpirationDto, } from './dto/response/compliance.dto'; import { LeadTimesResponseDto } from './dto/response/leadTime.dto'; import { GetUpcomingDto } from './dto/request/getUpcoming.dto'; import { LeadTimeService } from './leadTime.service'; @ApiTags('Conformidade') @Controller('compliance') @UseFilters(MappedExceptionFilter) @UseInterceptors(FiltersInterceptor) @UseGuards(JwtAuthGuard) export class ComplianceController { constructor( private readonly service: ComplianceService, private readonly leadTimeService: LeadTimeService, ) {} @Get('summary') @ApiBearerAuth() @ApiResponse({ status: HttpStatus.OK, type: ComplianceSummaryResponseDto }) async getSummary(@Query() filters: TenantWithStoreDto) { return this.service.getSummary(filters); } @Get('upcoming') @ApiBearerAuth() @ApiResponse({ status: HttpStatus.OK, type: [UpcomingExpirationDto] }) async getUpcoming(@Query() filters: GetUpcomingDto) { return this.service.getUpcoming({ programId: filters.programId, storeId: filters.storeId, days: filters.days ?? 90, }); } @Get('lead-times') @ApiBearerAuth() @ApiResponse({ status: HttpStatus.OK, type: LeadTimesResponseDto }) async getLeadTimes( @Query() filters: TenantDto, ): Promise { return { data: await this.leadTimeService.getLeadTimes(filters.programId) }; } }