import { Body, Controller, Delete, Get, Inject, Param, Post, Put, } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { PipelinesClientService } from 'src/clients/pipelines/client.service'; import { AuthenticateCondition } from 'src/authentication/authentication.decorator'; import { PERMISSIONS } from '../../authentication/permissions.enum'; import { PipelinesService } from './pipelines.service'; import { DadosferaLogger } from 'dadosfera-logs'; @ApiTags('Pipelines') @Controller('pipelines') @AuthenticateCondition((req, user) => { let action; switch (req.method) { case 'POST': action = 'CREATE'; break; case 'PUT': action = 'UPDATE'; break; default: action = req.method; } return user.permissions.includes(PERMISSIONS.PIPELINE[action].seqid); }) export class PipelinesController { logger: any; constructor( @Inject(DadosferaLogger) dadosferaLogger: DadosferaLogger, private pipelinesClientService: PipelinesClientService, ) { this.logger = dadosferaLogger.logger; } @Post('start/:id') async activate(@Param() params, @Body() body) { const { id } = params; const { info } = body; this.logger.info( process.env.DEV_URL + `/pipeline/start/${id} - ON START PIPELINE ROUTE`, { user: body.info.user_id, customer: body.info.customer, }, ); const pipelineService = new PipelinesService(this.pipelinesClientService); const response = await pipelineService.runPipeline({ id, info }); return response; } @Get(':id/status') async getPipelineStatus(@Body() body, @Param() params) { const { id } = params; body.id = id; this.logger.info( process.env.DEV_URL + `/pipeline/${id} - ON GET PIPELINE STATUS ROUTE`, { user: body.info.user_id, customer: body.info.customer, }, ); const pipelineService = new PipelinesService(this.pipelinesClientService); const response = await pipelineService.getPipelineStatus(body); return response; } @Get(':id/:details') async getPipelineLogs(@Param() params) { const { id, details } = params; this.logger.info( process.env.DEV_URL + `/pipeline/${id} - ON GET PIPELINE LOGS ROUTE`, {}, ); const pipelineService = new PipelinesService(this.pipelinesClientService); const response = await pipelineService.getPipelineLogsMessages(id, details); return response; } @Post() async create(@Body() createPipelineDto) { this.logger.info(process.env.DEV_URL + `/pipelines ON CREATE ROUTE`); const pipelineService = new PipelinesService(this.pipelinesClientService); const response = await pipelineService.create(createPipelineDto); return response; } @Get() async findAll(@Body() data) { this.logger.info(process.env.DEV_URL + `/pipeline ON Find All ROUTE`, { user: data.info.user_id, customer: data.info.customer, }); const pipelineService = new PipelinesService(this.pipelinesClientService); const response = await pipelineService.findAll(data); return response; } @Get('/:id') async findOne(@Body() data, @Param() params) { const { id } = params; this.logger.info(process.env.DEV_URL + `/pipeline/${id} ON Find One ROUTE`); const pipelineService = new PipelinesService(this.pipelinesClientService); const response = await pipelineService.findOne({ id, ...data }); return response; } @Put(':id') async update(@Body() updatePipelineDto, @Param() params) { const { id } = params; const { info } = updatePipelineDto; delete updatePipelineDto.info; this.logger.info(process.env.DEV_URL + `/pipeline/${id} ON UPDATE ROUTE`); const pipelineService = new PipelinesService(this.pipelinesClientService); const response = await pipelineService.update(id, updatePipelineDto, info); return response; } @Delete(':id') async delete(@Body() data, @Param() params) { const { id } = params; this.logger.info(process.env.DEV_URL + `/pipeline/${id} ON DELETE ROUTE`); const pipelineService = new PipelinesService(this.pipelinesClientService); const response = await pipelineService.remove({ id, ...data }); return response; } }