import { Body, Controller, Post, Get, HttpCode, HttpStatus, Inject, Headers, UseFilters, } from '@nestjs/common'; import { ApiHeaders, ApiTags } from '@nestjs/swagger'; import { TermsOfUseAcceptRequest } from '@dadosfera/protospack-v2/dist/lib/Duc/interfaces/messages'; import { TermsOfUseClientService } from './termsOfUse.service'; import { DadosferaLogger } from '@dadosfera/dadosfera-logs'; import { GrpcToHttpExceptionFilter } from '../../error/grpc-to-http-exception.filter'; import { RequestUser, User } from '../../decorators/user.decorator'; import { Metadata } from '@grpc/grpc-js'; import { Language } from 'src/decorators/language.decorator'; import { LanguageEnum } from 'src/utils/languages.enum'; import { ApiInternalOnlyController } from 'src/decorators/swagger.decorator'; @ApiInternalOnlyController() @ApiTags('TermsOfUse') @ApiHeaders([{ name: 'dadosfera-lang', enum: LanguageEnum, required: false }]) @UseFilters(new GrpcToHttpExceptionFilter()) @Controller('terms-of-use') export class TermsOfUseController { logger: DadosferaLogger; constructor( @Inject(DadosferaLogger) dadosferaLogger: DadosferaLogger, private termsOfUseClient: TermsOfUseClientService, ) { this.logger = dadosferaLogger.logger; } @Get('token') async getToken( @User({ required: true }) user: RequestUser, @Language() language: LanguageEnum, ) { this.logger.info('/terms-of-use - get token'); const metadata = new Metadata(); metadata.add('language', language || 'pt-br'); return this.termsOfUseClient.getToken({ userId: user.user_id }, metadata); } @Post('accept') @HttpCode(HttpStatus.OK) async accept(@Body() body: TermsOfUseAcceptRequest, @Headers() headers) { this.logger.info('/terms-of-use - accept'); const { token } = body; const fingerprint = { ip: process.env.ENV !== 'local' ? headers['x-forwarded-for'] : '0.0.0.0', port: process.env.ENV !== 'local' ? headers['x-forwarded-port'] : '00000', userAgent: headers['user-agent'], }; return this.termsOfUseClient.accept({ token, fingerprint }); } }