import { Body, Controller, Inject, Param, Post, Req } from '@nestjs/common'; import { ApiInternalOnlyController } from 'src/decorators/swagger.decorator'; import { RequestUser } from 'src/decorators/user.decorator'; import { MixpanelService } from './mixpanel.service'; import { extractUserFrom } from 'src/authentication/extract-user'; import DadosferaLogger from '@dadosfera/dadosfera-logs'; @ApiInternalOnlyController() @Controller('trackEvent') export class MixpanelController { logger: DadosferaLogger; constructor( @Inject(DadosferaLogger) dadosferaLogger: DadosferaLogger, private mixpanelService: MixpanelService, ) { this.logger = dadosferaLogger.logger; } @Post(':id') async trackEvent( @Param('id') id, @Body() body, @Req() request ) { this.logger.info(`POST Track Event: ${id}`) delete body.info; const anonymousUser = { username: "anonymous", customer_name: "anonymous" } as RequestUser const hasToken = request.headers['authorization']; const user = hasToken ? extractUserFrom(hasToken) : anonymousUser; this.logger.info(`Has user: ${typeof hasToken == "string"}`) await this.mixpanelService.track(id, user, request, body) this.logger.info(`Event successful`) return { id, body, user: user.username }; } }