import { Body, Controller, Delete, Get, Inject, Param, Post, Put, Headers, Query, } from '@nestjs/common'; import { ApiCreatedResponse, ApiTags } from '@nestjs/swagger'; import { AuthenticateCondition } from 'src/authentication/authentication.decorator'; import { PERMISSIONS_GROUPS } from '../../authentication/permissions.enum'; import { PipelinesService } from './pipelines.service'; import { DadosferaLogger } from '@dadosfera/dadosfera-logs'; import { Messages } from '@dadosfera/protospack-v2/dist/lib/PipelineV2'; import { RequestUser, User } from 'src/authentication/user.decorator'; import { PackTheMetadata } from 'src/utils/ PackTheMetadata'; import { PipelinesService as OldPipelineService } from 'src/modules/pipelines/pipelines.service'; import { ICreatePipelineV2Req, IPipelineV2 } from './interfaces'; @ApiTags('Pipelines') @Controller('pipelinesV2') @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 pipelinesClientService: PipelinesService, private oldPipelinesService: OldPipelineService, ) { this.logger = dadosferaLogger.logger; } @Post() @ApiCreatedResponse({ type: IPipelineV2 }) async create( @Headers('Dadosfera-Lang') language, @User() user: RequestUser, @Body() createPipelineDto: ICreatePipelineV2Req, ) { this.logger.info(process.env.DEV_URL + `/pipelines ON CREATE ROUTE`); if (!language) language = 'en-us'; const { customer_id, customer_name, username, user_id } = user; const metadata = PackTheMetadata({ customer_id, customer_name, username, user_id, language, }); const response = await this.pipelinesClientService.create( createPipelineDto, metadata, ); return response; } @Get() async findAll( @User() user: RequestUser, @Headers('Dadosfera-Lang') language, @Query() data, ) { this.logger.info(process.env.DEV_URL + `/pipeline ON Find All ROUTE`, { user: user.user_id, customer: user.customer_name, }); if (!language) language = 'en-us'; const { customer_id, customer_name, user_id, username } = user; const metadata = PackTheMetadata({ customer_id, customer_name, user_id, username, language, }); const response = await this.pipelinesClientService.findAll(data, metadata); return { pipelines: [...response.pipelines], }; } @Get('/:id') async findOne( @Headers('Dadosfera-Lang') language, @User() user: RequestUser, @Param('id') id, ): Promise { this.logger.info(process.env.DEV_URL + `/pipeline/${id} ON Find One ROUTE`); if (!language) language = 'en-us'; const { customer_id, customer_name, user_id, username } = user; const metadata = PackTheMetadata({ customer_id, customer_name, user_id, username, language, }); const result = await this.pipelinesClientService .findOne({ id }, metadata) .then((res) => { Object.assign(res.pipeline, { transformations: res.pipeline.transformations ? JSON.parse(res.pipeline.transformations) : [], config: { cron: res.pipeline.config.cron, tables: JSON.parse(res.pipeline.config.tables), }, properties: res.pipeline.properties ? JSON.parse(res.pipeline.properties) : {}, }); return res; }); return result; } @Put('/:id') async update(@Body() updatePipelineDto, @Param('id') id) { const { info } = updatePipelineDto; delete updatePipelineDto.info; this.logger.info(process.env.DEV_URL + `/pipeline/${id} ON UPDATE ROUTE`); const response = await this.pipelinesClientService.update({ ...updatePipelineDto, info, id, }); 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.pipelinesClientService.remove({ id, ...data }); return response; } }