mirror of
https://github.com/dadosfera/maestro.git
synced 2026-10-01 19:59:09 +00:00
102 lines
2.7 KiB
TypeScript
102 lines
2.7 KiB
TypeScript
import { Body, Controller, Inject, Param, Post, Req } from '@nestjs/common';
|
|
import { init } from 'mixpanel';
|
|
import { Authenticated } from 'src/decorators/authentication.decorator';
|
|
import { ApiInternalOnlyController } from 'src/decorators/swagger.decorator';
|
|
import { RequestUser, User } from 'src/decorators/user.decorator';
|
|
|
|
@ApiInternalOnlyController()
|
|
@Authenticated()
|
|
@Controller('trackEvent')
|
|
export class MixpanelController {
|
|
constructor(
|
|
@Inject('MIXPANEL_TOKEN')
|
|
private readonly mixpanelToken: string,
|
|
) {}
|
|
@Post(':id')
|
|
async trackEvent(
|
|
@Param('id') id,
|
|
@Body() body,
|
|
@User() user: RequestUser,
|
|
@Req() request
|
|
) {
|
|
delete body.info;
|
|
const mixpanel = init(this.mixpanelToken);
|
|
|
|
const separator = user.username.includes('-') ? '-' : '.';
|
|
const removeValues = [
|
|
'.dadosferatech.dadosfera',
|
|
'.demo.dadosfera',
|
|
'.dadosferademo',
|
|
'.dadosferarh.dadosfera',
|
|
'.dadosferatech.dadosfera2',
|
|
'.dadosferatech.dadosfera',
|
|
'.dadosfera.fin',
|
|
'.dadosferafin.dadosfera',
|
|
'.praxio.dadosfera',
|
|
'.dadosfera.tech',
|
|
'.treinamentos@dadosfera.ai',
|
|
'.dadosfera2',
|
|
'.treinamentosfera',
|
|
'.dadosfera',
|
|
];
|
|
|
|
let username = user.username;
|
|
|
|
removeValues.forEach((value) => {
|
|
username = username.replace(value, '');
|
|
});
|
|
|
|
username = username.split('@')?.[0];
|
|
username = username.split('+')?.[0];
|
|
|
|
let firstName = username
|
|
.substring(0, username.indexOf(separator))
|
|
.replace('dadosfera', '');
|
|
let lastName = username
|
|
.substring(username.lastIndexOf(separator) + 1)
|
|
.replace('dadosfera', '');
|
|
|
|
if (!firstName) {
|
|
firstName = lastName;
|
|
lastName = '';
|
|
}
|
|
|
|
firstName = this.capitalize(firstName);
|
|
lastName = this.capitalize(lastName);
|
|
|
|
await mixpanel.people.set(user.username, {
|
|
$first_name: firstName,
|
|
$last_name: lastName,
|
|
$name: this.getFullName(firstName, lastName),
|
|
$email: user.username.includes('@')
|
|
? user.username
|
|
: user.username + '@dadosfera.ai',
|
|
customer_name: user.customer_name
|
|
});
|
|
|
|
await mixpanel.track(id, {
|
|
distinct_id: user.username,
|
|
customer: user.customer_name,
|
|
env: process.env.ENV,
|
|
$ip: request.ip,
|
|
$os: request.headers['sec-ch-ua-platform'] || '',
|
|
$browser: request.headers['user-agent'],
|
|
...body,
|
|
});
|
|
|
|
return { id, body, user: user.username };
|
|
}
|
|
|
|
capitalize(sentence: string): string {
|
|
if (!sentence) {
|
|
return '';
|
|
}
|
|
|
|
return sentence[0].toUpperCase() + sentence.substring(1);
|
|
}
|
|
|
|
getFullName(firstName: string, lastName: string) {
|
|
return `${firstName}${lastName ? ' ' + lastName : ''}`;
|
|
}
|
|
}
|