143 lines
4.3 KiB
TypeScript
143 lines
4.3 KiB
TypeScript
import { Body, Controller, Get, Param, Post, Req, Res } from '@nestjs/common';
|
|
import { ApiTags } from '@nestjs/swagger';
|
|
import { AgenciesService } from '@gitroom/nestjs-libraries/database/prisma/agencies/agencies.service';
|
|
import { PostsService } from '@gitroom/nestjs-libraries/database/prisma/posts/posts.service';
|
|
import { TrackService } from '@gitroom/nestjs-libraries/track/track.service';
|
|
import { RealIP } from 'nestjs-real-ip';
|
|
import { UserAgent } from '@gitroom/nestjs-libraries/user/user.agent';
|
|
import { TrackEnum } from '@gitroom/nestjs-libraries/user/track.enum';
|
|
import { Request, Response } from 'express';
|
|
import { makeId } from '@gitroom/nestjs-libraries/services/make.is';
|
|
import { getCookieUrlFromDomain } from '@gitroom/helpers/subdomain/subdomain.management';
|
|
import { AgentGraphInsertService } from '@gitroom/nestjs-libraries/agent/agent.graph.insert.service';
|
|
import { Nowpayments } from '@gitroom/nestjs-libraries/crypto/nowpayments';
|
|
|
|
@ApiTags('Public')
|
|
@Controller('/public')
|
|
export class PublicController {
|
|
constructor(
|
|
private _agenciesService: AgenciesService,
|
|
private _trackService: TrackService,
|
|
private _agentGraphInsertService: AgentGraphInsertService,
|
|
private _postsService: PostsService,
|
|
private _nowpayments: Nowpayments
|
|
) {}
|
|
@Post('/agent')
|
|
async createAgent(@Body() body: { text: string; apiKey: string }) {
|
|
if (
|
|
!body.apiKey ||
|
|
!process.env.AGENT_API_KEY ||
|
|
body.apiKey !== process.env.AGENT_API_KEY
|
|
) {
|
|
return;
|
|
}
|
|
return this._agentGraphInsertService.newPost(body.text);
|
|
}
|
|
|
|
@Get('/agencies-list')
|
|
async getAgencyByUser() {
|
|
return this._agenciesService.getAllAgencies();
|
|
}
|
|
|
|
@Get('/agencies-list-slug')
|
|
async getAgencySlug() {
|
|
return this._agenciesService.getAllAgenciesSlug();
|
|
}
|
|
|
|
@Get('/agencies-information/:agency')
|
|
async getAgencyInformation(@Param('agency') agency: string) {
|
|
return this._agenciesService.getAgencyInformation(agency);
|
|
}
|
|
|
|
@Get('/agencies-list-count')
|
|
async getAgenciesCount() {
|
|
return this._agenciesService.getCount();
|
|
}
|
|
|
|
@Get(`/posts/:id`)
|
|
async getPreview(@Param('id') id: string) {
|
|
return (await this._postsService.getPostsRecursively(id, true)).map(
|
|
({ childrenPost, ...p }) => ({
|
|
...p,
|
|
...(p.integration
|
|
? {
|
|
integration: {
|
|
id: p.integration.id,
|
|
name: p.integration.name,
|
|
picture: p.integration.picture,
|
|
providerIdentifier: p.integration.providerIdentifier,
|
|
profile: p.integration.profile,
|
|
},
|
|
}
|
|
: {}),
|
|
})
|
|
);
|
|
}
|
|
|
|
@Get(`/posts/:id/comments`)
|
|
async getComments(@Param('id') postId: string) {
|
|
return { comments: await this._postsService.getComments(postId) };
|
|
}
|
|
|
|
@Post('/t')
|
|
async trackEvent(
|
|
@Res() res: Response,
|
|
@Req() req: Request,
|
|
@RealIP() ip: string,
|
|
@UserAgent() userAgent: string,
|
|
@Body()
|
|
body: { fbclid?: string; tt: TrackEnum; additional: Record<string, any> }
|
|
) {
|
|
const uniqueId = req?.cookies?.track || makeId(10);
|
|
const fbclid = req?.cookies?.fbclid || body.fbclid;
|
|
await this._trackService.track(
|
|
uniqueId,
|
|
ip,
|
|
userAgent,
|
|
body.tt,
|
|
body.additional,
|
|
fbclid
|
|
);
|
|
if (!req.cookies.track) {
|
|
res.cookie('track', uniqueId, {
|
|
domain: getCookieUrlFromDomain(process.env.FRONTEND_URL!),
|
|
...(!process.env.NOT_SECURED
|
|
? {
|
|
secure: true,
|
|
httpOnly: true,
|
|
}
|
|
: {}),
|
|
sameSite: 'none',
|
|
expires: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365),
|
|
});
|
|
}
|
|
|
|
if (body.fbclid && !req.cookies.fbclid) {
|
|
res.cookie('fbclid', body.fbclid, {
|
|
domain: getCookieUrlFromDomain(process.env.FRONTEND_URL!),
|
|
...(!process.env.NOT_SECURED
|
|
? {
|
|
secure: true,
|
|
httpOnly: true,
|
|
}
|
|
: {}),
|
|
sameSite: 'none',
|
|
expires: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365),
|
|
});
|
|
}
|
|
|
|
res.status(200).json({
|
|
track: uniqueId,
|
|
});
|
|
}
|
|
|
|
@Post('/crypto/:path')
|
|
async cryptoPost(
|
|
@Body() body: any,
|
|
@Param('path') path: string
|
|
) {
|
|
console.log('cryptoPost', body, path);
|
|
return this._nowpayments.processPayment(path, body);
|
|
}
|
|
}
|