Files
maestro/src/modules/connection-test/connection-test.controller.ts
T

163 lines
4.6 KiB
TypeScript

import {
Body,
Controller,
HttpCode,
HttpStatus,
Inject,
Post,
UseFilters,
ValidationPipe,
} from '@nestjs/common';
import { ApiOkResponse, ApiTags } from '@nestjs/swagger';
import { User, RequestUser } from 'src/decorators/user.decorator';
import { ConnectionTestService } from './connection-test.service';
import {
ConnectionTestPingRes,
ConnectionTestPingReq,
ConnectionTestCredentialsReq,
ConnectionTestCredentialsRes,
ConnectionTestListSchemasReq,
ConnectionTestListSchemasRes,
ConnectionTestListTablesReq,
ConnectionTestListTablesRes,
GetTableMetadataRes,
GetTableMetadataReq,
RefreshCatalogReq,
RefreshCatalogRes,
RefreshCatalogStatusReq,
} from './dto/connection-test';
import { DadosferaLogger } from '@dadosfera/dadosfera-logs';
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(
private connectionTestService: ConnectionTestService,
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
) {
this.logger = dadosferaLogger.logger;
}
@Post('ping')
@ApiOkResponse({ type: ConnectionTestPingRes })
@HttpCode(HttpStatus.OK)
async connectionTestPing(
@User() user: RequestUser,
@Body(new ValidationPipe()) body: ConnectionTestPingReq,
) {
this.logger.info('/connection-test/ping', {
user: user.user_id,
customer: user.customer_name,
});
return this.connectionTestService.connectionTestPing(body, user);
}
@Post('credentials')
@ApiOkResponse({ type: ConnectionTestCredentialsRes })
@HttpCode(HttpStatus.OK)
async connectionTestCredentials(
@User() user: RequestUser,
@Body() body: ConnectionTestCredentialsReq,
) {
this.logger.info('/connection-test/credentials', {
user: user.user_id,
customer: user.customer_name,
});
return this.connectionTestService.connectionTestCredentials(body, user);
}
@Post('schemas')
@ApiOkResponse({ type: ConnectionTestListSchemasRes })
@HttpCode(HttpStatus.OK)
async connectionTestListSchemas(
@User() user: RequestUser,
@Body(new ValidationPipe()) body: ConnectionTestListSchemasReq,
) {
this.logger.info('/connection-test/schemas', {
user: user.user_id,
customer: user.customer_name,
});
return this.connectionTestService.connectionTestListSchemas(
body,
user,
);
}
@Post('tables')
@ApiOkResponse({ type: ConnectionTestListTablesRes })
@HttpCode(HttpStatus.OK)
async connectionTestListTables(
@User() user: RequestUser,
@Body(new ValidationPipe()) body: ConnectionTestListTablesReq,
) {
this.logger.info('/connection-test/tables', {
user: user.user_id,
customer: user.customer_name,
});
return this.connectionTestService.connectionTestListTables(
body,
user,
);
}
@Post('table-metadata')
@ApiOkResponse({ type: GetTableMetadataRes })
@HttpCode(HttpStatus.OK)
async getTableMetadata(
@User() user: RequestUser,
@Body(new ValidationPipe()) body: GetTableMetadataReq,
) {
this.logger.info('/connection-test/table-metadata', {
user: user.user_id,
customer: user.customer_name,
});
return this.connectionTestService.getTableMetadata(
body,
user,
);
}
@Post('refresh-catalog')
@ApiOkResponse({ type: RefreshCatalogRes })
@HttpCode(HttpStatus.ACCEPTED)
async refreshCatalog(
@User() user: RequestUser,
@Body(new ValidationPipe()) body: RefreshCatalogReq,
) {
this.logger.info('/connection-test/refresh-catalog', {
user: user.user_id,
customer: user.customer_name,
connection: body.connection_id,
});
return this.connectionTestService.refreshCatalog(body, user);
}
@Post('refresh-catalog/status')
@ApiOkResponse({ type: RefreshCatalogRes })
@HttpCode(HttpStatus.OK)
async refreshCatalogStatus(
@User() user: RequestUser,
@Body(new ValidationPipe()) body: RefreshCatalogStatusReq,
) {
this.logger.info('/connection-test/refresh-catalog/status', {
user: user.user_id,
customer: user.customer_name,
connection: body.connection_id,
session: body.session_id,
});
return this.connectionTestService.refreshCatalogStatus(body, user);
}
}