mirror of
https://github.com/dadosfera/maestro.git
synced 2026-09-13 20:34:48 +00:00
286 lines
8.1 KiB
TypeScript
286 lines
8.1 KiB
TypeScript
import {
|
|
Body,
|
|
Controller,
|
|
Delete,
|
|
Get,
|
|
HttpException,
|
|
Param,
|
|
Put,
|
|
Post,
|
|
Query,
|
|
UploadedFile,
|
|
UseInterceptors,
|
|
Inject,
|
|
UploadedFiles,
|
|
} from '@nestjs/common';
|
|
import { FileInterceptor, FilesInterceptor } from '@nestjs/platform-express';
|
|
import { ApiConsumes, ApiTags } from '@nestjs/swagger';
|
|
import { ConnectorClientService } from './client.service';
|
|
import { AddTagDto } from './dtos/add-tag';
|
|
import { CreateConnectorDto } from './dtos/create-connector';
|
|
import { GetAllDto } from './dtos/get-all';
|
|
import { RemoveTagDto } from './dtos/remove-tag';
|
|
import { UpdateDto } from './dtos/update';
|
|
import { DadosferaLogger } from '@dadosfera/dadosfera-logs';
|
|
import {
|
|
Authenticated,
|
|
RequireAllPermissions,
|
|
RequireSomePermission,
|
|
} from 'src/decorators/authentication.decorator';
|
|
import { PERMISSIONS_GROUPS } from 'src/authentication/permissions.enum';
|
|
import { Language } from 'src/decorators/language.decorator';
|
|
import { LanguageEnum } from 'src/utils/languages.enum';
|
|
import { ApiInternalOnlyController } from 'src/decorators/swagger.decorator';
|
|
|
|
@ApiInternalOnlyController()
|
|
@ApiTags('connectors')
|
|
@Authenticated()
|
|
@Controller('connectors')
|
|
export class ConnectorController {
|
|
logger: DadosferaLogger;
|
|
constructor(
|
|
@Inject(DadosferaLogger)
|
|
dadosferaLogger: DadosferaLogger,
|
|
private connectorClientService: ConnectorClientService,
|
|
) {
|
|
this.logger = dadosferaLogger.logger;
|
|
}
|
|
|
|
@Post()
|
|
@RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.CREATE)
|
|
@ApiConsumes('multipart/form-data')
|
|
@UseInterceptors(FileInterceptor('file'))
|
|
async uploadConnector(
|
|
@UploadedFile() file,
|
|
@Body() body: CreateConnectorDto,
|
|
) {
|
|
this.logger.info('/upload - Upload Connector Route');
|
|
|
|
const response = await this.connectorClientService.uploadConnector({
|
|
file,
|
|
connector: JSON.parse(body.connector),
|
|
});
|
|
|
|
return response;
|
|
}
|
|
|
|
@Post('/uploads')
|
|
@RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.CREATE)
|
|
@ApiConsumes('multipart/form-data')
|
|
@UseInterceptors(FilesInterceptor('files'))
|
|
async uploadFile(@UploadedFiles() files) {
|
|
this.logger.info('/upload - Upload Connector Route');
|
|
const promises = files.map(async (file) => {
|
|
return await this.connectorClientService.uploadFile({
|
|
file,
|
|
name: file.originalname.split('.')[0],
|
|
});
|
|
});
|
|
|
|
const response = await Promise.all(promises);
|
|
return response;
|
|
}
|
|
|
|
@Post('/multiple-connectors-upload')
|
|
@RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.CREATE)
|
|
@ApiConsumes('multipart/form-data')
|
|
@UseInterceptors(FileInterceptor('file'))
|
|
async uploadConnectorsFile(@UploadedFile() file: Express.Multer.File) {
|
|
this.logger.info(`/upload`, 'Upload Connector Route');
|
|
|
|
return await this.connectorClientService.uploadConnectorsFile(file);
|
|
}
|
|
|
|
@Get()
|
|
@RequireSomePermission(
|
|
PERMISSIONS_GROUPS.CONNECTORS.permissions.GET,
|
|
PERMISSIONS_GROUPS.PIPELINE.permissions.CREATE,
|
|
PERMISSIONS_GROUPS.PIPELINE.permissions.GET,
|
|
PERMISSIONS_GROUPS.PIPELINE.permissions.UPDATE,
|
|
PERMISSIONS_GROUPS.PIPELINE.permissions.DELETE,
|
|
)
|
|
async getAllConnectors(
|
|
@Language() language: LanguageEnum,
|
|
@Query() queries: GetAllDto,
|
|
) {
|
|
this.logger.info('/GET - getAllConnectors Route');
|
|
|
|
const { search, size, page, ...filters } = queries;
|
|
|
|
const response: any = await this.connectorClientService.getAllConnectors({
|
|
filters: filters || {},
|
|
search: search || '',
|
|
language: language || 'pt-br',
|
|
size: size || 10,
|
|
page: page || 1,
|
|
});
|
|
|
|
const connectors = JSON.parse(response.connectors);
|
|
|
|
return {
|
|
message: response.message,
|
|
connectors,
|
|
};
|
|
}
|
|
|
|
@Get('/tags')
|
|
@RequireSomePermission(
|
|
PERMISSIONS_GROUPS.CONNECTORS.permissions.GET,
|
|
PERMISSIONS_GROUPS.PIPELINE.permissions.CREATE,
|
|
PERMISSIONS_GROUPS.PIPELINE.permissions.GET,
|
|
PERMISSIONS_GROUPS.PIPELINE.permissions.UPDATE,
|
|
PERMISSIONS_GROUPS.PIPELINE.permissions.DELETE,
|
|
)
|
|
async getConnectorsTags() {
|
|
return await this.connectorClientService.getConnectorsTags();
|
|
}
|
|
|
|
@Get('/:plugin')
|
|
@RequireSomePermission(
|
|
PERMISSIONS_GROUPS.CONNECTORS.permissions.GET,
|
|
PERMISSIONS_GROUPS.PIPELINE.permissions.CREATE,
|
|
PERMISSIONS_GROUPS.PIPELINE.permissions.GET,
|
|
PERMISSIONS_GROUPS.PIPELINE.permissions.UPDATE,
|
|
PERMISSIONS_GROUPS.PIPELINE.permissions.DELETE,
|
|
)
|
|
async getConnector(
|
|
@Language() language: LanguageEnum,
|
|
@Param('plugin') plugin: string,
|
|
@Query('version') version: string,
|
|
) {
|
|
this.logger.info('/GET/:plugin - getConnector Route');
|
|
|
|
const pluginId = `${plugin}-${version}`;
|
|
|
|
const response: any = await this.connectorClientService.getConnector(
|
|
pluginId,
|
|
language,
|
|
);
|
|
|
|
return {
|
|
message: response.message || 'ok',
|
|
connector: { ...JSON.parse(response.connector) },
|
|
};
|
|
}
|
|
|
|
@Get('/:plugin/details')
|
|
@RequireSomePermission(
|
|
PERMISSIONS_GROUPS.CONNECTORS.permissions.GET,
|
|
PERMISSIONS_GROUPS.PIPELINE.permissions.CREATE,
|
|
PERMISSIONS_GROUPS.PIPELINE.permissions.GET,
|
|
PERMISSIONS_GROUPS.PIPELINE.permissions.UPDATE,
|
|
PERMISSIONS_GROUPS.PIPELINE.permissions.DELETE,
|
|
)
|
|
async getConnectorDetails(
|
|
@Language() language: LanguageEnum,
|
|
@Param('plugin') plugin: string,
|
|
@Query('version') version: string,
|
|
) {
|
|
this.logger.info('/upload - Upload Connector Route');
|
|
const pluginId = `${plugin}-${version}`;
|
|
|
|
const response: any = await this.connectorClientService.getConnectorDetails(
|
|
pluginId,
|
|
language || 'pt-br',
|
|
);
|
|
|
|
return {
|
|
message: response.message || 'ok',
|
|
connector: { ...JSON.parse(response.connector) },
|
|
};
|
|
}
|
|
|
|
@Put('/:plugin')
|
|
@RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.UPDATE)
|
|
@ApiConsumes('multipart/form-data')
|
|
async updateConnector(
|
|
@Param('plugin') plugin: string,
|
|
@Body() body: UpdateDto,
|
|
) {
|
|
this.logger.info('/upload - Upload Connector Route');
|
|
|
|
const changes = body;
|
|
|
|
const response: any = await this.connectorClientService.updateConnector({
|
|
plugin,
|
|
changes: JSON.stringify(changes),
|
|
});
|
|
|
|
return {
|
|
message: response.message || 'ok',
|
|
connector: { ...JSON.parse(response.connector) },
|
|
};
|
|
}
|
|
|
|
@Put('/:plugin/add-tag')
|
|
@RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.UPDATE)
|
|
async addTagOnConnector(
|
|
@Param('plugin') plugin: string,
|
|
@Body() body: AddTagDto,
|
|
) {
|
|
this.logger.info('/upload - Upload Connector Route');
|
|
|
|
const { tags } = body;
|
|
|
|
if (!tags || !(typeof tags === 'object') || !tags.length) {
|
|
throw new HttpException('Not found tags attributes', 400);
|
|
}
|
|
|
|
const changes = { plugin, tags };
|
|
|
|
const response: any = await this.connectorClientService.updateConnector({
|
|
plugin,
|
|
changes: JSON.stringify(changes),
|
|
});
|
|
|
|
return {
|
|
message: response.message || 'ok',
|
|
connector: { ...JSON.parse(response.connector) },
|
|
};
|
|
}
|
|
|
|
@Put('/:plugin/remove-tag')
|
|
@RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.UPDATE)
|
|
async removeTagOnConnector(
|
|
@Param('plugin') plugin: string,
|
|
@Body() body: RemoveTagDto,
|
|
) {
|
|
this.logger.info('/upload - Upload Connector Route');
|
|
|
|
const { tags } = body;
|
|
const remove = tags;
|
|
|
|
if (!remove || !(typeof remove === 'object') || !remove.length) {
|
|
throw new HttpException('Not found remove attribute', 400);
|
|
}
|
|
|
|
const changes = { plugin, remove };
|
|
|
|
const response: any = await this.connectorClientService.updateConnector({
|
|
plugin,
|
|
changes: JSON.stringify(changes),
|
|
});
|
|
|
|
return {
|
|
message: response.message || 'ok',
|
|
connector: { ...JSON.parse(response.connector) },
|
|
};
|
|
}
|
|
|
|
@Delete('/:plugin')
|
|
@RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.DELETE)
|
|
async deleteConnector(
|
|
@Param('plugin') plugin: string,
|
|
@Query('version') version: string,
|
|
) {
|
|
this.logger.info('DELETE /:plugin - Delete Connector Route');
|
|
|
|
const response = await this.connectorClientService.deleteConnector(
|
|
plugin,
|
|
version,
|
|
);
|
|
|
|
return { message: response.message, connector: response.connector };
|
|
}
|
|
}
|