Implementing a link tracking and user click logging system.Implementing a link tracking and user click logging system.

This commit is contained in:
2026-10-01 15:59:18 +03:30
parent ae21d9bbc7
commit 5d5b3a3213
20 changed files with 978 additions and 8211 deletions
@@ -0,0 +1,43 @@
import {
Controller,
Get,
Headers,
Param,
Req,
Res,
} from '@nestjs/common';
import type { Request, Response } from 'express';
import { TrackingService } from './tracking.service';
/**
* ریدایرکت عمومی بدون احراز هویت.
* مسیر نهایی: GET /api/t/:token
*/
@Controller('t')
export class PublicTrackingController {
constructor(private readonly tracking: TrackingService) {}
@Get(':token')
async redirect(
@Param('token') token: string,
@Headers('user-agent') userAgent: string | undefined,
@Headers('referer') referer: string | undefined,
@Req() req: Request,
@Res() res: Response,
) {
const ip =
(typeof req.headers['x-forwarded-for'] === 'string'
? req.headers['x-forwarded-for'].split(',')[0]?.trim()
: undefined) ||
req.ip ||
undefined;
const target = await this.tracking.handleClick(token, {
userAgent,
referer,
ip,
});
return res.redirect(302, target);
}
}