import { Body, Controller, Delete, Get, Headers, Inject, Param, Patch, 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/authentication/user.decorator'; import { CreateNetworkConfigReq, CreateNetworkConfigRes, DeleteNetworkConfigRes, FindAllNetworkConfigsRes, UpdateNetworkConfigReq, UpdateNetworkConfigRes, } from './dto/network-config'; import { FileInterceptor } from '@nestjs/platform-express'; @ApiTags('Network Config') @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, @Headers('Dadosfera-Lang') language, @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, @Headers('Dadosfera-Lang') language, @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 }) @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 }) 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, }); } }