import { Body, Controller, Delete, Get, Inject, Param, Post, Put, } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { AuthenticateCondition, Authenticated, } from 'src/authentication/authentication.decorator'; import { PERMISSIONS_GROUPS } from '../../authentication/permissions.enum'; import { PipelinesService } from './pipelines.service'; import { DadosferaLogger } from '@dadosfera/dadosfera-logs'; import { RequestUser, User } from 'src/authentication/user.decorator'; @ApiTags('Pipelines') @Controller('pipelines') @Authenticated() @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_GROUPS.PIPELINE.permissions[action].seqid, ); }) export class PipelinesController { logger: DadosferaLogger; constructor( @Inject(DadosferaLogger) dadosferaLogger: DadosferaLogger, private pipelineService: PipelinesService, ) { 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 response = await this.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 response = await this.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 response = await this.pipelineService.getPipelineLogsMessages( id, details, ); return response; } @Post() async create(@Body() createPipelineDto) { this.logger.info(process.env.DEV_URL + `/pipelines ON CREATE ROUTE`); const response = await this.pipelineService.create(createPipelineDto); return response; } @Get() async findAll(@User() user: RequestUser) { this.logger.info(process.env.DEV_URL + `/pipeline ON Find All ROUTE`, { user: user.user_id, customer: user.customer_id, }); const { customer_id, user_id, customer_name } = user; const response = await this.pipelineService.findAll({ customer_name, customer_id, user_id, }); 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 response = await this.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 response = await this.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 response = await this.pipelineService.remove({ id, ...data }); return response; } }