import { Controller, Get, Post, Body, Param, Delete, UseFilters, Inject } from '@nestjs/common'; import { ApiKeyService } from './api-key.service'; import { CreateApiKeyDto, CreateApiKeyResponseDto, ApiKeyBaseResponseDto } from './dto/api-key.dto'; import { Authenticated } from 'src/decorators/authentication.decorator'; import { ApiHeaders, ApiTags, ApiResponse } from '@nestjs/swagger'; import { LanguageEnum } from 'src/utils/languages.enum'; import { GrpcToHttpExceptionFilter } from 'src/error/grpc-to-http-exception.filter'; import { RequestUser, User } from 'src/decorators/user.decorator'; import { DadosferaLogger } from '@dadosfera/dadosfera-logs'; @Controller('api-key') @Authenticated() @ApiTags('ApiKey') @ApiHeaders([{ name: 'dadosfera-lang', enum: LanguageEnum, required: false }]) @UseFilters(new GrpcToHttpExceptionFilter()) export class ApiKeyController { logger: DadosferaLogger; constructor( @Inject(DadosferaLogger) dadosferaLogger: DadosferaLogger, private readonly apiKeyService: ApiKeyService, ) { this.logger = dadosferaLogger.logger; } @Post() @ApiResponse({ type: CreateApiKeyResponseDto }) async create(@Body() createApiKeyDto: CreateApiKeyDto, @User() user: RequestUser): Promise { this.logger.info('POST /api-key', { permissions: createApiKeyDto.permissions, method: 'create' }); const result = await this.apiKeyService.create(createApiKeyDto, user); this.logger.info('POST /api-key success', { id: result.id, method: 'create' }); return result; } @Get() @ApiResponse({ type: [ApiKeyBaseResponseDto] }) async findAll(@User() user: RequestUser): Promise { this.logger.info('GET /api-key', { method: 'findAll' }); const result = await this.apiKeyService.findAll(user); this.logger.info('GET /api-key success', { count: result.length, method: 'findAll' }); return result; } @Delete(':id') async remove(@Param('id') id: string, @User() user: RequestUser): Promise { this.logger.info('DELETE /api-key/:id', { id, method: 'remove' }); await this.apiKeyService.remove(id, user); this.logger.info('DELETE /api-key/:id success', { id, method: 'remove' }); } }