import { Controller, Get, Inject, Param, Req, UseFilters, } from '@nestjs/common'; import { ApiHeaders, ApiTags, } from '@nestjs/swagger'; import { DadosferaLogger } from '@dadosfera/dadosfera-logs'; import { RequestUser, User } from 'src/decorators/user.decorator'; import { IColumnsMetadataResponse, IDocsResponse, IPreviewResponse, } from '../dtos'; import { GrpcToHttpExceptionFilter } from 'src/error/grpc-to-http-exception.filter'; import { Language } from 'src/decorators/language.decorator'; import { LanguageEnum } from 'src/utils/languages.enum'; import { ShareService } from './share.service'; import { Request } from 'express'; @ApiTags('Catalog') @ApiHeaders([{ name: 'dadosfera-lang', enum: LanguageEnum, required: false }]) @Controller('catalog/data-asset/share') @UseFilters(new GrpcToHttpExceptionFilter()) export class ShareController { logger: DadosferaLogger; constructor( @Inject(DadosferaLogger) dadosferaLogger: DadosferaLogger, private catalogShareService: ShareService, ) { this.logger = dadosferaLogger.logger; } @Get('/:id') async getShareDataAsset( @Param('id') id: string, @Req() request: Request ) { this.logger.info(`GET //:id`); return await this.catalogShareService.getOneDataAssetPublic(id, request); } @Get('/:id/columns-metadata') async getShareDataAssetColumnsMetadata( @Language() language: LanguageEnum, @Param('id') id: string, @Req() request: Request ): Promise { this.logger.info(`GET /:id/columns-metadata`); const columns_metadata = await this.catalogShareService.getDatasetColumnsMetadata(id, request); return { columns_metadata }; } @Get('/:id/preview') async getShareDataAssetPreview( @Language() language: LanguageEnum, @Param('id') id: string, @Req() request: Request ): Promise { this.logger.info(`GET /:id/preview`); const preview = await this.catalogShareService.getDatasetPreview(id, request); return { preview }; } @Get('/:id/docs') async getShareDataAssetDocs( @Language() language: LanguageEnum, @Param('id') id: string, @Req() request: Request ): Promise { this.logger.info(`GET /:id/docs`); const docs = await this.catalogShareService.getDataDocs(id, request); return { docs }; } }