import { Body, Controller, Delete, Get, Inject, Param, Patch, Post, } from '@nestjs/common'; import { InputsService } from './inputs.service'; import { DadosferaLogger } from '@dadosfera/dadosfera-logs'; import { PERMISSIONS_GROUPS } from '../../authentication/permissions.enum'; import { AuthenticateCondition } from 'src/authentication/authentication.decorator'; import { ApiOkResponse, ApiTags } from '@nestjs/swagger'; import { CreateInputReq, GetAvailableEntitiesReq, GetAvailableEntitiesRes, Input, TestConnectionGetColumnsReq, TestConnectionGetColumnsRes, TestConnectionReq, TestConnectionRes, } from './dtos/input.model'; import { UpdateInputRequest } from './dtos/old_interfaces'; import { RequestUser, User } from 'src/authentication/user.decorator'; import { Info } from '@dadosfera/protospack-v2/dist/lib/Input/interfaces/entities'; @ApiTags('inputs') @Controller('inputs') @AuthenticateCondition((req, user) => { switch (req.method) { case 'POST': case 'PUT': case 'PATCH': return ( user.permissions.includes( PERMISSIONS_GROUPS.PIPELINE.permissions.CREATE.seqid, ) || user.permissions.includes(PERMISSIONS_GROUPS.PIPELINE.permissions.UPDATE.seqid) ); default: return ( user.permissions.includes( PERMISSIONS_GROUPS.PIPELINE.permissions.CREATE.seqid, ) || user.permissions.includes( PERMISSIONS_GROUPS.PIPELINE.permissions.UPDATE.seqid, ) || user.permissions.includes(PERMISSIONS_GROUPS.PIPELINE.permissions.GET.seqid) ); } }) export class InputsController { logger: DadosferaLogger; constructor( @Inject(DadosferaLogger) dadosferaLogger: DadosferaLogger, private inputService: InputsService, ) { this.logger = dadosferaLogger.logger; } @Get('available-entities/:plugin') @ApiOkResponse({ type: GetAvailableEntitiesRes }) async getAvailableEntities( @Body() body, @Param() params: GetAvailableEntitiesReq, ) { const { info } = body; const { plugin } = params; return await this.inputService.getAvailableEntities({ info, plugin }); } @Post('/test-connection') @ApiOkResponse({ type: TestConnectionRes }) async testConnection(@Body() data: TestConnectionReq) { this.logger.info(`/test-connection - ON TEST CONNECTION ROUTE`, { user: data.info.user_id, customer: data.info.customer, }); const response = await this.inputService.testConnection(data); return response; } @Post('/test-connection/get-columns') @ApiOkResponse({ type: TestConnectionGetColumnsRes }) async getColumns(@Body() data: TestConnectionGetColumnsReq) { this.logger.info( `/test-connection/get-columns - ON TEST CONNECTION GET COLUMNS ROUTE`, { user: data.info.user_id, customer: data.info.customer, }, ); const response = await this.inputService.getColumns(data); return response; } @Post() @ApiOkResponse({ type: Input }) async create(@Body() body: CreateInputReq, @User() user: RequestUser) { const info: Info = { user_id: user.user_id, customer: user.customer_name, customer_id: user.customer_id, }; this.logger.info(`/input - ON CREATE ROUTE`, { user: info.user_id, customer: info.customer, }); const response = await this.inputService.create({ body, info }); return response; } @Get() async findAll(@User() user: RequestUser) { const { user_id, customer_id, customer_name: customer } = user; this.logger.info(`/input - ON FIND ALL ROUTE`, { user: user.user_id, customer, }); const info: Info = { customer, customer_id, user_id, }; const response = await this.inputService.findAll(info); return response; } @Get('/:id') async findOne(@Body() body, @Param() params) { const { id } = params; this.logger.info(`/input/${id} - ON FIND ONE ROUTE`, { user: body.info.user_id, customer: body.info.customer, }); const response = await this.inputService.findOne({ id, ...body }); return response; } @Patch(':id') async update(@Body() updateInputDto: UpdateInputRequest, @Param() params) { const { id } = params; const { info } = updateInputDto; this.logger.info(`/input/${id} - ON UPDATE ROUTE`, { user: info.user_id, customer: info.customer_id, }); delete updateInputDto.info; const response = await this.inputService.update(id, updateInputDto, info); return response; } @Delete(':id') async delete(@Body() data, @Param() params) { const { id } = params; this.logger.info(`/input/${id} - ON DELETE ROUTE`, { user: data.info.user_id, customer: data.info.customer, }); const response = await this.inputService.remove({ id, ...data }); return response; } }