import { Body, Controller, Get, Inject, Param, Post, Query, UploadedFile, UseInterceptors, } from '@nestjs/common'; import { NetworkConfigService } from './network-config.service'; import { DadosferaLogger } from '@dadosfera/dadosfera-logs'; import { ApiConsumes, ApiOkResponse, ApiTags } from '@nestjs/swagger'; import { RequestUser, User } from 'src/decorators/user.decorator'; import { CreateNetworkConfigReq, CreateNetworkConfigRes, FindAllNetworkConfigsRes, } from './dto/network-config'; import { FileInterceptor } from '@nestjs/platform-express'; import { PERMISSIONS_GROUPS } from 'src/authentication/permissions.enum'; import { Authenticated, RequireAllPermissions, } from 'src/decorators/authentication.decorator'; import { Language } from 'src/decorators/language.decorator'; import { LanguageEnum } from 'src/utils/languages.enum'; const networkConfigPermissions = PERMISSIONS_GROUPS.NETWORK_CONFIG.permissions; @ApiTags('Network Config') @Authenticated() @Controller('network-config') export class NetworkConfigController { logger: any; constructor( private networkConfigService: NetworkConfigService, @Inject(DadosferaLogger) dadosferaLogger: DadosferaLogger, ) { this.logger = dadosferaLogger.logger; } @Get() @ApiOkResponse({ type: FindAllNetworkConfigsRes }) async findAllNetworkConfigs( @User() user: RequestUser, @Language() language: LanguageEnum, @Query() queries, ) { this.logger.info('GET /network-config', { user: user.user_id, customer: user.customer_name, }); const { user_id, customer_id, customer_name } = user; const { search, size, page, ...filters } = queries; return this.networkConfigService.findAllNetworkConfigs({ body: { search, size, page, filters }, info: { user_id, customer_id, customer_name, language }, }); } @Get(':id') @ApiOkResponse({ type: FindAllNetworkConfigsRes }) async findNetworkConfigById( @User() user: RequestUser, @Param('id') id: string, ) { this.logger.info('GET /network-config/:id', { user: user.user_id, customer: user.customer_name, }); return this.networkConfigService.findNetworkConfigById(id); } @Get(':id/details') @ApiOkResponse({ type: FindAllNetworkConfigsRes }) async findNetworkConfigByIdDetails( @User() user: RequestUser, @Language() language: LanguageEnum, @Param('id') id: string, ) { this.logger.info('GET /network-config/:id', { user: user.user_id, customer: user.customer_name, }); return this.networkConfigService.findNetworkConfigByIdDetails(id, { customer_name: user.customer_name, customer_id: user.customer_id, language, }); } @Post() @ApiOkResponse({ type: CreateNetworkConfigRes }) @RequireAllPermissions(networkConfigPermissions.CREATE) @ApiConsumes('multipart/form-data') @UseInterceptors(FileInterceptor('ovpn_file')) async createNetworkConfigs( @User() user: RequestUser, @UploadedFile() file: Express.Multer.File, @Body() body: CreateNetworkConfigReq, ) { this.logger.info('POST /network-config', { user: user.user_id, customer: user.customer_name, }); const { customer_id, customer_name, user_id } = user; return this.networkConfigService.createNetworkConfig(body, file, { customer_name, customer_id, user_id, }); } // @Patch(':id') // @ApiOkResponse({ type: UpdateNetworkConfigRes }) // @RequireAllPermissions(networkConfigPermissions.CREATE) // async updateNetworkConfig( // @User() user: RequestUser, // @Param('id') network_config_id: string, // @Body() body: UpdateNetworkConfigReq, // ) { // this.logger.info('PATCH /network-config/:id', { // user: user.user_id, // customer: user.customer_name, // }); // return this.networkConfigService.updateNetworkConfig( // body, // network_config_id, // ); // } // @Delete(':id') // @ApiOkResponse({ type: DeleteNetworkConfigRes }) // async deleteNetworkConfig( // @User() user: RequestUser, // @Param('id') network_config_id: string, // ) { // this.logger.info('DELETE /network-config', { // user: user.user_id, // customer: user.customer_name, // }); // return this.networkConfigService.deleteNetworkConfig(network_config_id, { // customer_name: user.customer_name, // customer_id: user.customer_id, // }); // } }