Files
maestro/src/modules/termsOfUse/termsOfUse.controller.ts
T

68 lines
2.1 KiB
TypeScript

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 });
}
}