From 0c4888ccdbc6decd881db12cec0be2b6a699791d Mon Sep 17 00:00:00 2001 From: marcosrodrigues-dadosfera Date: Wed, 12 Aug 2026 09:57:23 -0300 Subject: [PATCH 1/7] FIX: require collect module in endpoints --- docsfera.json | 234 ++++++++++++++++++ src/authentication/permissions.enum.ts | 2 + src/modules/catalog/catalog.controller.ts | 54 ++++ .../connection-test.controller.ts | 6 +- .../connection/connection.controller.ts | 6 +- src/modules/connector/connector.controller.ts | 27 +- .../pipelinesV2/pipelines.controller.ts | 6 +- .../platform-api/platform-api.controller.ts | 4 +- 8 files changed, 334 insertions(+), 5 deletions(-) diff --git a/docsfera.json b/docsfera.json index bdf641a..b3a85b5 100644 --- a/docsfera.json +++ b/docsfera.json @@ -900,6 +900,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -949,6 +952,9 @@ "connections" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -997,6 +1003,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -1033,6 +1042,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -1066,6 +1078,9 @@ "connections" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -2403,6 +2418,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -2486,6 +2504,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -2525,6 +2546,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -2564,6 +2588,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -2601,6 +2628,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -2640,6 +2670,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -2681,6 +2714,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -2722,6 +2758,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -3071,6 +3110,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3120,6 +3162,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3190,6 +3235,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3230,6 +3278,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3270,6 +3321,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3310,6 +3364,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3350,6 +3407,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3397,6 +3457,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3442,6 +3505,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3490,6 +3556,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3528,6 +3597,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3586,6 +3658,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3634,6 +3709,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3674,6 +3752,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3716,6 +3797,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3765,6 +3849,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3814,6 +3901,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -3861,6 +3951,9 @@ "PipelinesV2" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4031,6 +4124,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4056,6 +4152,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4092,6 +4191,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4126,6 +4228,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4160,6 +4265,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4187,6 +4295,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4214,6 +4325,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4241,6 +4355,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4277,6 +4394,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4313,6 +4433,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4340,6 +4463,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4367,6 +4493,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4404,6 +4533,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4440,6 +4572,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4484,6 +4619,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4520,6 +4658,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4564,6 +4705,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4600,6 +4744,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4634,6 +4781,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4670,6 +4820,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4706,6 +4859,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4743,6 +4899,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4770,6 +4929,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -4797,6 +4959,9 @@ "Platform API" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -5208,6 +5373,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -5251,6 +5419,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -5360,6 +5531,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -5392,6 +5566,9 @@ "Catalog" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -5434,6 +5611,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -5527,6 +5707,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -5585,6 +5768,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -5633,6 +5819,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -5726,6 +5915,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -5776,6 +5968,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -5834,6 +6029,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -5890,6 +6088,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -5950,6 +6151,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -5990,6 +6194,9 @@ "Catalog" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -6030,6 +6237,9 @@ "Catalog" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -6090,6 +6300,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -6148,6 +6361,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -6524,6 +6740,9 @@ { "access-token": [] }, + { + "access-token": [] + }, { "access-token": [] } @@ -6977,6 +7196,9 @@ "Connection Test" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -7013,6 +7235,9 @@ "Connection Test" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -7049,6 +7274,9 @@ "Connection Test" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -7085,6 +7313,9 @@ "Connection Test" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } @@ -7121,6 +7352,9 @@ "Connection Test" ], "security": [ + { + "access-token": [] + }, { "access-token": [] } diff --git a/src/authentication/permissions.enum.ts b/src/authentication/permissions.enum.ts index 82ee026..1cb5045 100644 --- a/src/authentication/permissions.enum.ts +++ b/src/authentication/permissions.enum.ts @@ -722,6 +722,8 @@ export const DADOSFERA_MODULES_KEYS = { PII: 'pii', EMBED: 'embedded-analytics', EMBED_ASSIGNED: 'embed-assigned', + CATALOG: 'catalog', + COLLECT: 'collect', } export const DADOSFERA_MODULES: Array = [ diff --git a/src/modules/catalog/catalog.controller.ts b/src/modules/catalog/catalog.controller.ts index 308a082..ef8ab78 100644 --- a/src/modules/catalog/catalog.controller.ts +++ b/src/modules/catalog/catalog.controller.ts @@ -85,6 +85,9 @@ export class CatalogController { PERMISSIONS_GROUPS.CATALOG.permissions.GET, PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async searchCatalog( @User() user: RequestUser, @Query() query: ICatalogAllRequest, @@ -124,6 +127,9 @@ export class CatalogController { PERMISSIONS_GROUPS.CATALOG.permissions.GET, PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async dowloadAsserts( @User() user: RequestUser, @Query() query: ICatalogAllRequest, @@ -167,6 +173,9 @@ export class CatalogController { @ApiInternalOnlyEndpoint() @Get('data-asset') + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async findByPipelineAndObject(@User() user: RequestUser, @Query() query) { const { username, user_id, customer_id, customer_name, permissions } = user; const { pipeline, object } = query; @@ -225,6 +234,9 @@ export class CatalogController { PERMISSIONS_GROUPS.CATALOG.permissions.GET, PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async findAllTags(@Body() body) { this.logger.info(`/catalog - ON FIND ALL TAGS ROUTE`, { user: body.info.user_id, @@ -276,6 +288,9 @@ export class CatalogController { PERMISSIONS_GROUPS.CATALOG.permissions.GET, PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async getDataAsset( @User() user: RequestUser, @Param('id') id: string, @@ -387,6 +402,9 @@ export class CatalogController { PERMISSIONS_GROUPS.CATALOG.permissions.GET, PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async getDataAssetColumnsMetadata( @User() user: RequestUser, @Language() language: LanguageEnum, @@ -418,6 +436,9 @@ export class CatalogController { PERMISSIONS_GROUPS.CATALOG.permissions.GET, PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async getDataAssetPreview( @User() user: RequestUser, @Language() language: LanguageEnum, @@ -449,6 +470,9 @@ export class CatalogController { PERMISSIONS_GROUPS.CATALOG.permissions.GET, PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async getDataAssetDocs( @User() user: RequestUser, @Language() language: LanguageEnum, @@ -480,6 +504,9 @@ export class CatalogController { PERMISSIONS_GROUPS.CATALOG.permissions.UPDATE, PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async updateDataAsset( @User() user: RequestUser, @Language() language: LanguageEnum, @@ -515,6 +542,9 @@ export class CatalogController { PERMISSIONS_GROUPS.CATALOG.permissions.CERTIFY, PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async updateDataAssetCertificationStatus( @User() user: RequestUser, @Language() language: LanguageEnum, @@ -542,6 +572,9 @@ export class CatalogController { PERMISSIONS_GROUPS.CATALOG.permissions.UPDATE, PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async manageDataAssetDocs( @User() user: RequestUser, @Headers() headers, @@ -579,6 +612,9 @@ export class CatalogController { @ApiInternalOnlyEndpoint() @Put('data-asset/:id/manage-permissions') + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async manageDataAssetPermissions( @Param('id') id: string, @User() user: RequestUser, @@ -601,6 +637,9 @@ export class CatalogController { @ApiInternalOnlyEndpoint() @Put('data-asset/:id/revoke-permissions') + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async revokeDataAssetPermissions( @Param('id') id: string, @User() user: RequestUser, @@ -626,6 +665,9 @@ export class CatalogController { PERMISSIONS_GROUPS.CATALOG.permissions.CREATE, PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async createDataAsset( @User() user: RequestUser, @Body() body: ICreateDataAsset, @@ -650,6 +692,9 @@ export class CatalogController { PERMISSIONS_GROUPS.CATALOG.permissions.UPDATE, PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async commentOnDataAsset( @Param('id') id: string, @User() user: RequestUser, @@ -676,6 +721,9 @@ export class CatalogController { PERMISSIONS_GROUPS.CATALOG.permissions.DELETE, PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async deleteDataAsset(@Param('id') id: string, @User() user: RequestUser) { const { customer_id, customer_name, user_id, username } = user; const metadata = PackTheMetadata({ @@ -697,6 +745,9 @@ export class CatalogController { PERMISSIONS_GROUPS.CATALOG.permissions.UPDATE, PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async deleteComment( @Param('id') id: string, @User() user: RequestUser, @@ -850,6 +901,9 @@ export class CatalogController { @Get('nimbus-dashboards') @RequireAllPermissions(PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER) + @RequireModule( + DADOSFERA_MODULES_KEYS.CATALOG + ) async getNimbusDashboards( @User() user: RequestUser, @Body() body: GetNimbusDashboardsRequest, diff --git a/src/modules/connection-test/connection-test.controller.ts b/src/modules/connection-test/connection-test.controller.ts index f197358..029da68 100644 --- a/src/modules/connection-test/connection-test.controller.ts +++ b/src/modules/connection-test/connection-test.controller.ts @@ -24,15 +24,19 @@ import { GetTableMetadataReq, } from './dto/connection-test'; import { DadosferaLogger } from '@dadosfera/dadosfera-logs'; -import { Authenticated } from 'src/decorators/authentication.decorator'; +import { Authenticated, RequireModule } from 'src/decorators/authentication.decorator'; import { GrpcToHttpExceptionFilter } from 'src/error/grpc-to-http-exception.filter'; import { ApiInternalOnlyController } from 'src/decorators/swagger.decorator'; +import { DADOSFERA_MODULES_KEYS } from 'src/authentication/permissions.enum'; @ApiInternalOnlyController() @ApiTags('Connection Test') @Controller('connection-test') @UseFilters(new GrpcToHttpExceptionFilter()) @Authenticated() +@RequireModule( + DADOSFERA_MODULES_KEYS.COLLECT +) export class ConnectionTestController { logger: any; constructor( diff --git a/src/modules/connection/connection.controller.ts b/src/modules/connection/connection.controller.ts index 194e9aa..b1987dc 100644 --- a/src/modules/connection/connection.controller.ts +++ b/src/modules/connection/connection.controller.ts @@ -16,8 +16,9 @@ import { DadosferaLogger } from '@dadosfera/dadosfera-logs'; import { Authenticated, RequireAllPermissions, + RequireModule, } from 'src/decorators/authentication.decorator'; -import { PERMISSIONS_GROUPS } from 'src/authentication/permissions.enum'; +import { DADOSFERA_MODULES_KEYS, PERMISSIONS_GROUPS } from 'src/authentication/permissions.enum'; import { RequestUser, User } from 'src/decorators/user.decorator'; import { ValidationPipe } from '../../pipes/object-validation.pipe'; import { @@ -39,6 +40,9 @@ const connectionPermissions = PERMISSIONS_GROUPS.CONNECTION.permissions; @ApiTags('connections') @Authenticated() @Controller('connections') +@RequireModule( + DADOSFERA_MODULES_KEYS.COLLECT +) export class ConnectionController { logger: any; constructor( diff --git a/src/modules/connector/connector.controller.ts b/src/modules/connector/connector.controller.ts index c755ae8..858ef8c 100644 --- a/src/modules/connector/connector.controller.ts +++ b/src/modules/connector/connector.controller.ts @@ -25,9 +25,10 @@ import { DadosferaLogger } from '@dadosfera/dadosfera-logs'; import { Authenticated, RequireAllPermissions, + RequireModule, RequireSomePermission, } from 'src/decorators/authentication.decorator'; -import { PERMISSIONS_GROUPS } from 'src/authentication/permissions.enum'; +import { DADOSFERA_MODULES_KEYS, 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'; @@ -99,6 +100,9 @@ export class ConnectorController { PERMISSIONS_GROUPS.PIPELINE.permissions.UPDATE, PERMISSIONS_GROUPS.PIPELINE.permissions.DELETE, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.COLLECT + ) async getAllConnectors( @Language() language: LanguageEnum, @Query() queries: GetAllDto, @@ -131,6 +135,9 @@ export class ConnectorController { PERMISSIONS_GROUPS.PIPELINE.permissions.UPDATE, PERMISSIONS_GROUPS.PIPELINE.permissions.DELETE, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.COLLECT + ) async getConnectorsTags() { return await this.connectorClientService.getConnectorsTags(); } @@ -143,6 +150,9 @@ export class ConnectorController { PERMISSIONS_GROUPS.PIPELINE.permissions.UPDATE, PERMISSIONS_GROUPS.PIPELINE.permissions.DELETE, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.COLLECT + ) async getConnector( @Language() language: LanguageEnum, @Param('plugin') plugin: string, @@ -171,6 +181,9 @@ export class ConnectorController { PERMISSIONS_GROUPS.PIPELINE.permissions.UPDATE, PERMISSIONS_GROUPS.PIPELINE.permissions.DELETE, ) + @RequireModule( + DADOSFERA_MODULES_KEYS.COLLECT + ) async getConnectorDetails( @Language() language: LanguageEnum, @Param('plugin') plugin: string, @@ -193,6 +206,9 @@ export class ConnectorController { @Put('/:plugin') @RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.UPDATE) @ApiConsumes('multipart/form-data') + @RequireModule( + DADOSFERA_MODULES_KEYS.COLLECT + ) async updateConnector( @Param('plugin') plugin: string, @Body() body: UpdateDto, @@ -214,6 +230,9 @@ export class ConnectorController { @Put('/:plugin/add-tag') @RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.UPDATE) + @RequireModule( + DADOSFERA_MODULES_KEYS.COLLECT + ) async addTagOnConnector( @Param('plugin') plugin: string, @Body() body: AddTagDto, @@ -241,6 +260,9 @@ export class ConnectorController { @Put('/:plugin/remove-tag') @RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.UPDATE) + @RequireModule( + DADOSFERA_MODULES_KEYS.COLLECT + ) async removeTagOnConnector( @Param('plugin') plugin: string, @Body() body: RemoveTagDto, @@ -269,6 +291,9 @@ export class ConnectorController { @Delete('/:plugin') @RequireAllPermissions(PERMISSIONS_GROUPS.CONNECTORS.permissions.DELETE) + @RequireModule( + DADOSFERA_MODULES_KEYS.COLLECT + ) async deleteConnector( @Param('plugin') plugin: string, @Query('version') version: string, diff --git a/src/modules/pipelinesV2/pipelines.controller.ts b/src/modules/pipelinesV2/pipelines.controller.ts index ea64d8c..c24c090 100644 --- a/src/modules/pipelinesV2/pipelines.controller.ts +++ b/src/modules/pipelinesV2/pipelines.controller.ts @@ -25,9 +25,10 @@ import { } from '@nestjs/swagger'; import { RequireAllPermissions, + RequireModule, RequireSomePermission, } from 'src/decorators/authentication.decorator'; -import { PERMISSIONS_GROUPS } from '../../authentication/permissions.enum'; +import { DADOSFERA_MODULES_KEYS, 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'; @@ -57,6 +58,9 @@ type PipelineTablesConfig = { input_id?: string; tables: PipelineTable[] }; @ApiHeaders([{ name: 'dadosfera-lang', enum: LanguageEnum, required: false }]) @UseFilters(new GrpcToHttpExceptionFilter()) @Controller('pipelinesV2') +@RequireModule( + DADOSFERA_MODULES_KEYS.COLLECT +) export class PipelinesController { logger: DadosferaLogger; constructor( diff --git a/src/modules/platform-api/platform-api.controller.ts b/src/modules/platform-api/platform-api.controller.ts index 16d27b3..503d117 100644 --- a/src/modules/platform-api/platform-api.controller.ts +++ b/src/modules/platform-api/platform-api.controller.ts @@ -20,10 +20,11 @@ import { DadosferaLogger } from '@dadosfera/dadosfera-logs'; import { Authenticated, RequireAllPermissions, + RequireModule, } from '../../decorators/authentication.decorator'; import { User, RequestUser } from '../../decorators/user.decorator'; import { PlatformApiService } from './platform-api.service'; -import { PERMISSIONS_GROUPS } from '../../authentication/permissions.enum'; +import { DADOSFERA_MODULES_KEYS, PERMISSIONS_GROUPS } from '../../authentication/permissions.enum'; import { ElasticsearchService } from '../../services/elasticsearch'; import { DynamoDBService, ReferenceColumn } from '../../services/dynamodb'; import { CustomersService } from '../customers/customers.service'; @@ -49,6 +50,7 @@ type RenameTablesBody = { @ApiTags('Platform API') @Controller('platform') +@RequireModule(DADOSFERA_MODULES_KEYS.COLLECT) export class PlatformApiController { private logger: any; From 6efc25ad5e75cfe80aff0c68661b76ab3b050a15 Mon Sep 17 00:00:00 2001 From: viniciusgadea Date: Thu, 20 Aug 2026 08:26:56 -0300 Subject: [PATCH 2/7] FEAT: add endpoint to update column description in catalog --- docsfera.json | 43 +++++++++++++++++++++++ src/modules/catalog/catalog.controller.ts | 37 +++++++++++++++++++ src/modules/catalog/catalog.service.ts | 19 ++++++++++ 3 files changed, 99 insertions(+) diff --git a/docsfera.json b/docsfera.json index b3a85b5..e4d97f7 100644 --- a/docsfera.json +++ b/docsfera.json @@ -5924,6 +5924,49 @@ ] } }, + "/catalog/data-asset/{id}/columns-metadata/description": { + "patch": { + "operationId": "CatalogController_updateColumnDescription", + "parameters": [ + { + "name": "dadosfera-lang", + "in": "header", + "required": false, + "schema": { + "enum": [ + "pt-br", + "en-us" + ], + "type": "string" + } + }, + { + "name": "id", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "" + } + }, + "tags": [ + "Catalog" + ], + "security": [ + { + "access-token": [] + }, + { + "access-token": [] + } + ] + } + }, "/catalog/data-asset/{id}/preview": { "get": { "operationId": "CatalogController_getDataAssetPreview", diff --git a/src/modules/catalog/catalog.controller.ts b/src/modules/catalog/catalog.controller.ts index ef8ab78..1941aa5 100644 --- a/src/modules/catalog/catalog.controller.ts +++ b/src/modules/catalog/catalog.controller.ts @@ -9,6 +9,7 @@ import { Inject, NotFoundException, Param, + Patch, Post, Put, Query, @@ -431,6 +432,42 @@ export class CatalogController { return { columns_metadata }; } + @Patch('data-asset/:id/columns-metadata/description') + @RequireSomePermission( + PERMISSIONS_GROUPS.CATALOG.permissions.UPDATE, + PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER, + ) + async updateColumnDescription( + @User() user: RequestUser, + @Language() language: LanguageEnum, + @Param('id') id: string, + @Body() body: { column_name: string; description: string }, + ): Promise<{ success: boolean }> { + const { customer_name, customer_id, user_id, username } = user; + + this.logger.info(`/catalog - update column description`, { + user_id, + customer_name, + }); + + const metadata = PackTheMetadata({ + customer_name, + customer_id, + user_id, + username, + language, + }); + + await this.catalogService.updateColumnDescription( + id, + body.column_name, + body.description, + metadata, + ); + + return { success: true }; + } + @Get('data-asset/:id/preview') @RequireSomePermission( PERMISSIONS_GROUPS.CATALOG.permissions.GET, diff --git a/src/modules/catalog/catalog.service.ts b/src/modules/catalog/catalog.service.ts index f0fced8..94ea9c6 100644 --- a/src/modules/catalog/catalog.service.ts +++ b/src/modules/catalog/catalog.service.ts @@ -463,6 +463,25 @@ class CatalogService implements OnModuleInit { return result; } + async updateColumnDescription( + id: string, + column_name: string, + description: string, + metadata: Metadata, + ) { + await lastValueFrom( + this.catalogWriteService.UpdateDataAsset( + { + id, + changes: JSON.stringify({ + column_description: { column_name, description }, + }), + }, + metadata, + ), + ); + } + async createDataDocs(body: CreateDataDocsDTO, metadata: Metadata) { if (body.asset_type === 'table' || body.asset_type === 'view') { return this.createDataDocsViaNimbus(body); From a4f4335e4350997de81b9672a6055fd5849d2388 Mon Sep 17 00:00:00 2001 From: viniciusgadea Date: Tue, 25 Aug 2026 09:05:46 -0300 Subject: [PATCH 3/7] FEAT: update columns metadata endpoint to accept batch updates and add error handling for missing columns --- docsfera.json | 6 ++-- src/modules/catalog/catalog.controller.ts | 37 +++++++++++++++++------ src/modules/catalog/catalog.service.ts | 7 ++--- src/utils/ErrorBuilder.ts | 8 +++++ src/utils/errorCodes.ts | 1 + 5 files changed, 41 insertions(+), 18 deletions(-) diff --git a/docsfera.json b/docsfera.json index e4d97f7..c978f88 100644 --- a/docsfera.json +++ b/docsfera.json @@ -5922,11 +5922,9 @@ "access-token": [] } ] - } - }, - "/catalog/data-asset/{id}/columns-metadata/description": { + }, "patch": { - "operationId": "CatalogController_updateColumnDescription", + "operationId": "CatalogController_updateColumnsMetadata", "parameters": [ { "name": "dadosfera-lang", diff --git a/src/modules/catalog/catalog.controller.ts b/src/modules/catalog/catalog.controller.ts index 1941aa5..9484f1b 100644 --- a/src/modules/catalog/catalog.controller.ts +++ b/src/modules/catalog/catalog.controller.ts @@ -432,22 +432,44 @@ export class CatalogController { return { columns_metadata }; } - @Patch('data-asset/:id/columns-metadata/description') + @Patch('data-asset/:id/columns-metadata') @RequireSomePermission( PERMISSIONS_GROUPS.CATALOG.permissions.UPDATE, PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER, ) - async updateColumnDescription( + async updateColumnsMetadata( @User() user: RequestUser, @Language() language: LanguageEnum, @Param('id') id: string, - @Body() body: { column_name: string; description: string }, + @Body() + body: { + column_name?: string; + description?: string; + columns?: { column_name: string; description: string }[]; + }, ): Promise<{ success: boolean }> { const { customer_name, customer_id, user_id, username } = user; - this.logger.info(`/catalog - update column description`, { + // Accept both a single { column_name, description } and a batch { columns: [...] }. + const columns = Array.isArray(body.columns) + ? body.columns + : [{ column_name: body.column_name, description: body.description }]; + + // column_name and description must be strings — the frontend renders the + // description as text and breaks on non-string values (e.g. numbers). + for (const column of columns) { + if (typeof column?.column_name !== 'string' || !column.column_name.trim()) { + throw new BadRequestException('column_name must be a non-empty string'); + } + if (typeof column?.description !== 'string') { + throw new BadRequestException('description must be a string'); + } + } + + this.logger.info(`/catalog - update columns metadata`, { user_id, customer_name, + columns_count: columns.length, }); const metadata = PackTheMetadata({ @@ -458,12 +480,7 @@ export class CatalogController { language, }); - await this.catalogService.updateColumnDescription( - id, - body.column_name, - body.description, - metadata, - ); + await this.catalogService.updateColumnsDescriptions(id, columns, metadata); return { success: true }; } diff --git a/src/modules/catalog/catalog.service.ts b/src/modules/catalog/catalog.service.ts index 94ea9c6..0683106 100644 --- a/src/modules/catalog/catalog.service.ts +++ b/src/modules/catalog/catalog.service.ts @@ -463,10 +463,9 @@ class CatalogService implements OnModuleInit { return result; } - async updateColumnDescription( + async updateColumnsDescriptions( id: string, - column_name: string, - description: string, + columns: { column_name: string; description: string }[], metadata: Metadata, ) { await lastValueFrom( @@ -474,7 +473,7 @@ class CatalogService implements OnModuleInit { { id, changes: JSON.stringify({ - column_description: { column_name, description }, + column_descriptions: columns, }), }, metadata, diff --git a/src/utils/ErrorBuilder.ts b/src/utils/ErrorBuilder.ts index 49171ee..7e48cb5 100644 --- a/src/utils/ErrorBuilder.ts +++ b/src/utils/ErrorBuilder.ts @@ -315,6 +315,14 @@ export function EnrichErrorCode(code: string) { 'Tente realizar a ação novamente. Caso o erro persista, entre em contato com o suporte', code, }; + case ErrorCodes.CATALOG.COLUMN_NOT_FOUND: + return { + statusCode: HttpStatus.NOT_FOUND, + error: 'Coluna não encontrada', + message: + 'Uma ou mais colunas informadas não existem neste ativo. Verifique os nomes e tente novamente.', + code, + }; case ErrorCodes.CATALOG.PREVIEW_TOO_BIG: return { statusCode: HttpStatus.INTERNAL_SERVER_ERROR, diff --git a/src/utils/errorCodes.ts b/src/utils/errorCodes.ts index a5856bd..c6f41f9 100644 --- a/src/utils/errorCodes.ts +++ b/src/utils/errorCodes.ts @@ -74,6 +74,7 @@ const CATALOG = { DATA_ASSET_NOT_FOUND: 'CATALOG.DATA_ASSET_NOT_FOUND', PREVIEW_TOO_BIG: 'CATALOG.PREVIEW_TOO_BIG', METADATA_TOO_BIG: 'CATALOG.METADATA_TOO_BIG', + COLUMN_NOT_FOUND: 'CATALOG.COLUMN_NOT_FOUND', }; const IDENTITY_PROVIDER = { INVALID_RESPONSE: 'IDENTITY_PROVIDER.INVALID_RESPONSE', From 4db15fceabe781671daf4048147557e5b06db03a Mon Sep 17 00:00:00 2001 From: viniciusgadea Date: Tue, 25 Aug 2026 09:36:02 -0300 Subject: [PATCH 4/7] FEAT: add request body and DTOs for updating columns metadata in catalog --- docsfera.json | 39 +++++++++++++++++++++++ src/modules/catalog/catalog.controller.ts | 32 +++++-------------- src/modules/catalog/dtos/index.ts | 30 ++++++++++++++++- 3 files changed, 76 insertions(+), 25 deletions(-) diff --git a/docsfera.json b/docsfera.json index c978f88..cc4bfd0 100644 --- a/docsfera.json +++ b/docsfera.json @@ -5947,6 +5947,16 @@ } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateColumnsMetadataRequest" + } + } + } + }, "responses": { "200": { "description": "" @@ -11162,6 +11172,35 @@ "columns_metadata" ] }, + "ColumnDescriptionDto": { + "type": "object", + "properties": { + "column_name": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "required": [ + "column_name", + "description" + ] + }, + "UpdateColumnsMetadataRequest": { + "type": "object", + "properties": { + "columns": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ColumnDescriptionDto" + } + } + }, + "required": [ + "columns" + ] + }, "IData": { "type": "object", "properties": { diff --git a/src/modules/catalog/catalog.controller.ts b/src/modules/catalog/catalog.controller.ts index 9484f1b..1690e58 100644 --- a/src/modules/catalog/catalog.controller.ts +++ b/src/modules/catalog/catalog.controller.ts @@ -52,6 +52,7 @@ import { IUpdateDataRequest, TriggerCatalogReq, TriggerCatalogRes, + UpdateColumnsMetadataRequest, } from './dtos'; import { GrpcToHttpExceptionFilter } from 'src/error/grpc-to-http-exception.filter'; import { Language } from 'src/decorators/language.decorator'; @@ -441,35 +442,14 @@ export class CatalogController { @User() user: RequestUser, @Language() language: LanguageEnum, @Param('id') id: string, - @Body() - body: { - column_name?: string; - description?: string; - columns?: { column_name: string; description: string }[]; - }, + @Body(new ValidationPipe()) body: UpdateColumnsMetadataRequest, ): Promise<{ success: boolean }> { const { customer_name, customer_id, user_id, username } = user; - // Accept both a single { column_name, description } and a batch { columns: [...] }. - const columns = Array.isArray(body.columns) - ? body.columns - : [{ column_name: body.column_name, description: body.description }]; - - // column_name and description must be strings — the frontend renders the - // description as text and breaks on non-string values (e.g. numbers). - for (const column of columns) { - if (typeof column?.column_name !== 'string' || !column.column_name.trim()) { - throw new BadRequestException('column_name must be a non-empty string'); - } - if (typeof column?.description !== 'string') { - throw new BadRequestException('description must be a string'); - } - } - this.logger.info(`/catalog - update columns metadata`, { user_id, customer_name, - columns_count: columns.length, + columns_count: body.columns.length, }); const metadata = PackTheMetadata({ @@ -480,7 +460,11 @@ export class CatalogController { language, }); - await this.catalogService.updateColumnsDescriptions(id, columns, metadata); + await this.catalogService.updateColumnsDescriptions( + id, + body.columns, + metadata, + ); return { success: true }; } diff --git a/src/modules/catalog/dtos/index.ts b/src/modules/catalog/dtos/index.ts index 770b01c..6b71473 100644 --- a/src/modules/catalog/dtos/index.ts +++ b/src/modules/catalog/dtos/index.ts @@ -1,5 +1,13 @@ import { ApiProperty, ApiPropertyOptional, PickType } from '@nestjs/swagger'; -import { IsEnum } from 'class-validator'; +import { + ArrayNotEmpty, + IsArray, + IsEnum, + IsNotEmpty, + IsString, + ValidateNested, +} from 'class-validator'; +import { Type } from 'class-transformer'; import { CreateDataAssetRequest } from '@dadosfera/protospack-v2/dist/lib/Catalog/interfaces/messages'; export enum DataAssetShareType { @@ -219,6 +227,26 @@ export class IUpdateCertificationStatusRequest { certification_status: CertificationStatus; } +export class ColumnDescriptionDto { + @ApiProperty() + @IsString() + @IsNotEmpty() + column_name: string; + + @ApiProperty() + @IsString() + description: string; +} + +export class UpdateColumnsMetadataRequest { + @ApiProperty({ type: [ColumnDescriptionDto] }) + @IsArray() + @ArrayNotEmpty() + @ValidateNested({ each: true }) + @Type(() => ColumnDescriptionDto) + columns: ColumnDescriptionDto[]; +} + export class ICreateDataAsset implements CreateDataAssetRequest { @ApiProperty() display_name: string; From cf4e0aea224b44eb02f7311b230bbcc971233f1e Mon Sep 17 00:00:00 2001 From: viniciusgadea Date: Tue, 25 Aug 2026 14:06:25 -0300 Subject: [PATCH 5/7] FEAT: update protospack-v2 dependency to version 3.40.0-beta.18 and refactor UpdateDataAsset method in CatalogService --- package-lock.json | 9 +++++---- package.json | 2 +- src/modules/catalog/catalog.service.ts | 11 ++--------- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index cf5d6e5..50edabe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "@aws-sdk/lib-dynamodb": "^3.414.0", "@aws-sdk/signature-v4": "^3.370.0", "@dadosfera/dadosfera-logs": "^1.0.0-beta.4", - "@dadosfera/protospack-v2": "^3.40.0-beta.14", + "@dadosfera/protospack-v2": "^3.40.0-beta.18", "@grpc/grpc-js": "^1.9.3", "@grpc/proto-loader": "^0.7.9", "@nestjs/cli": "^9.5.0", @@ -1735,9 +1735,10 @@ } }, "node_modules/@dadosfera/protospack-v2": { - "version": "3.40.0-beta.14", - "resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com/npm/dadosfera-npm/@dadosfera/protospack-v2/-/protospack-v2-3.40.0-beta.14.tgz", - "integrity": "sha512-pv3pxq0x1XcBgf3ajD6QOFRLOduh8iEozKFA3AKlIW4gid+gT4iL0GcU2M+O7h0QFeO4JIzRZe/nEMN82nqk7A==", + "version": "3.40.0-beta.18", + "resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com/npm/dadosfera-npm/@dadosfera/protospack-v2/-/protospack-v2-3.40.0-beta.18.tgz", + "integrity": "sha512-YI1+nFte9HsmsOBNC2EJ1MNU3KYckgkyfWz/g8/HQ85sOJhP4fKB7YHEgSPq/xUVl3cKHjK+iAV63CloVWGB5g==", + "license": "ISC", "dependencies": { "@grpc/grpc-js": "^1.9.3", "rxjs": "^7.5.5" diff --git a/package.json b/package.json index 2c10052..1f3ac17 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@aws-sdk/lib-dynamodb": "^3.414.0", "@aws-sdk/signature-v4": "^3.370.0", "@dadosfera/dadosfera-logs": "^1.0.0-beta.4", - "@dadosfera/protospack-v2": "^3.40.0-beta.14", + "@dadosfera/protospack-v2": "^3.40.0-beta.18", "@grpc/grpc-js": "^1.9.3", "@grpc/proto-loader": "^0.7.9", "@nestjs/cli": "^9.5.0", diff --git a/src/modules/catalog/catalog.service.ts b/src/modules/catalog/catalog.service.ts index 755a32e..1c4d54d 100644 --- a/src/modules/catalog/catalog.service.ts +++ b/src/modules/catalog/catalog.service.ts @@ -473,15 +473,7 @@ class CatalogService implements OnModuleInit { metadata: Metadata, ) { await lastValueFrom( - this.catalogWriteService.UpdateDataAsset( - { - id, - changes: JSON.stringify({ - column_descriptions: columns, - }), - }, - metadata, - ), + this.catalogWriteService.UpdateColumnDescriptions({ id, columns }, metadata), ); } @@ -850,6 +842,7 @@ class CatalogService implements OnModuleInit { data_asset_id: table_metadata_id.toString(), customer_name: customer_name, data_asset_type: 'dataset', + column_metadata: [], }, ], }, From 8916dfc46c2e2b7248ae03c70f46a1ff31a00268 Mon Sep 17 00:00:00 2001 From: viniciusgadea Date: Tue, 25 Aug 2026 17:05:34 -0300 Subject: [PATCH 6/7] FEAT: update @dadosfera/protospack-v2 dependency to version 3.40.0-beta.19 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 50edabe..5506401 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "@aws-sdk/lib-dynamodb": "^3.414.0", "@aws-sdk/signature-v4": "^3.370.0", "@dadosfera/dadosfera-logs": "^1.0.0-beta.4", - "@dadosfera/protospack-v2": "^3.40.0-beta.18", + "@dadosfera/protospack-v2": "^3.40.0-beta.19", "@grpc/grpc-js": "^1.9.3", "@grpc/proto-loader": "^0.7.9", "@nestjs/cli": "^9.5.0", @@ -1735,9 +1735,9 @@ } }, "node_modules/@dadosfera/protospack-v2": { - "version": "3.40.0-beta.18", - "resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com/npm/dadosfera-npm/@dadosfera/protospack-v2/-/protospack-v2-3.40.0-beta.18.tgz", - "integrity": "sha512-YI1+nFte9HsmsOBNC2EJ1MNU3KYckgkyfWz/g8/HQ85sOJhP4fKB7YHEgSPq/xUVl3cKHjK+iAV63CloVWGB5g==", + "version": "3.40.0-beta.19", + "resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com/npm/dadosfera-npm/@dadosfera/protospack-v2/-/protospack-v2-3.40.0-beta.19.tgz", + "integrity": "sha512-RT7BYWHD2aD945FXzDXHa/xM+sD2B2Ypepy/W/WS+RwKYTSMCfuUXGzK2lXcd9HP9+U+Zjfh90Lkktl++8enjg==", "license": "ISC", "dependencies": { "@grpc/grpc-js": "^1.9.3", diff --git a/package.json b/package.json index 1f3ac17..fd16bd9 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@aws-sdk/lib-dynamodb": "^3.414.0", "@aws-sdk/signature-v4": "^3.370.0", "@dadosfera/dadosfera-logs": "^1.0.0-beta.4", - "@dadosfera/protospack-v2": "^3.40.0-beta.18", + "@dadosfera/protospack-v2": "^3.40.0-beta.19", "@grpc/grpc-js": "^1.9.3", "@grpc/proto-loader": "^0.7.9", "@nestjs/cli": "^9.5.0", From ba609a949441a601993086a80af49b31b850eb70 Mon Sep 17 00:00:00 2001 From: viniciusgadea Date: Tue, 25 Aug 2026 17:14:22 -0300 Subject: [PATCH 7/7] FEAT: add data_preview field to data asset creation in CatalogService --- docsfera.json | 305 ++++++++++++++++++++++++- src/modules/catalog/catalog.service.ts | 1 + 2 files changed, 305 insertions(+), 1 deletion(-) diff --git a/docsfera.json b/docsfera.json index cc4bfd0..1b0f444 100644 --- a/docsfera.json +++ b/docsfera.json @@ -4714,6 +4714,65 @@ ] } }, + "/platform/pipelines/{pipelineId}/pipeline_run/{runId}/jobs": { + "get": { + "operationId": "PlatformApiController_getPipelineRunJobs", + "summary": "Get pipeline run jobs", + "description": "Proxies platform-api DB-backed job runs and returns `{ jobs: [...] }`.", + "parameters": [ + { + "name": "pipelineId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "name": "runId", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "DB-backed job runs for the selected pipeline run.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "jobs": { + "type": "array", + "items": { + "type": "object" + } + } + }, + "required": [ + "jobs" + ] + } + } + } + } + }, + "tags": [ + "Platform API" + ], + "security": [ + { + "access-token": [] + }, + { + "access-token": [] + } + ] + } + }, "/platform/jobs/{jobId}/input": { "put": { "operationId": "PlatformApiController_updateJobInput", @@ -5662,6 +5721,48 @@ ] } }, + "/catalog/custom-properties": { + "get": { + "operationId": "CatalogController_getCustomPropertyDefinitions", + "parameters": [ + { + "name": "dadosfera-lang", + "in": "header", + "required": false, + "schema": { + "enum": [ + "pt-br", + "en-us" + ], + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + }, + "tags": [ + "Catalog" + ], + "security": [ + { + "access-token": [] + }, + { + "access-token": [] + } + ] + } + }, "/catalog/data-asset/{id}": { "get": { "operationId": "CatalogController_getDataAsset", @@ -7412,6 +7513,94 @@ ] } }, + "/connection-test/refresh-catalog": { + "post": { + "operationId": "ConnectionTestController_refreshCatalog", + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefreshCatalogReq" + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefreshCatalogRes" + } + } + } + }, + "202": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefreshCatalogRes" + } + } + } + } + }, + "tags": [ + "Connection Test" + ], + "security": [ + { + "access-token": [] + }, + { + "access-token": [] + } + ] + } + }, + "/connection-test/refresh-catalog/status": { + "post": { + "operationId": "ConnectionTestController_refreshCatalogStatus", + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefreshCatalogStatusReq" + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RefreshCatalogRes" + } + } + } + } + }, + "tags": [ + "Connection Test" + ], + "security": [ + { + "access-token": [] + }, + { + "access-token": [] + } + ] + } + }, "/oauth/hubspot": { "get": { "operationId": "OauthController_oauthHubspot", @@ -11303,6 +11492,37 @@ "docs" ] }, + "CustomPropertyDto": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "text", + "number", + "date", + "boolean" + ] + }, + "color": { + "type": "string" + }, + "emoji": { + "type": "string" + } + }, + "required": [ + "key", + "value", + "type" + ] + }, "IUpdateDataRequest": { "type": "object", "properties": { @@ -11331,6 +11551,12 @@ }, "docs": { "type": "string" + }, + "custom_properties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomPropertyDto" + } } }, "required": [ @@ -11760,11 +11986,15 @@ }, "type": { "type": "string" + }, + "is_primary_key": { + "type": "boolean" } }, "required": [ "name", - "type" + "type", + "is_primary_key" ] }, "TableMetadataDto": { @@ -11810,6 +12040,79 @@ "tables_metadata" ] }, + "RefreshCatalogReq": { + "type": "object", + "properties": { + "connection_id": { + "type": "string" + }, + "plugin": { + "type": "string", + "enum": [ + "oracle", + "mysql", + "postgresql", + "sqlserver" + ] + } + }, + "required": [ + "connection_id", + "plugin" + ] + }, + "RefreshCatalogRes": { + "type": "object", + "properties": { + "operation_result": { + "type": "boolean" + }, + "status": { + "type": "string" + }, + "session_id": { + "type": "string" + }, + "date": { + "type": "string" + } + }, + "required": [ + "operation_result", + "status", + "session_id", + "date" + ] + }, + "RefreshCatalogStatusReq": { + "type": "object", + "properties": { + "connection_id": { + "type": "string" + }, + "plugin": { + "type": "string", + "enum": [ + "oracle", + "mysql", + "postgresql", + "sqlserver" + ] + }, + "session_id": { + "type": "string" + }, + "date": { + "type": "string" + } + }, + "required": [ + "connection_id", + "plugin", + "session_id", + "date" + ] + }, "INote": { "type": "object", "properties": { diff --git a/src/modules/catalog/catalog.service.ts b/src/modules/catalog/catalog.service.ts index 1c4d54d..d50e819 100644 --- a/src/modules/catalog/catalog.service.ts +++ b/src/modules/catalog/catalog.service.ts @@ -843,6 +843,7 @@ class CatalogService implements OnModuleInit { customer_name: customer_name, data_asset_type: 'dataset', column_metadata: [], + data_preview: '', }, ], },