Files
sfera/src/app/track/[linkId]/route.ts

34 lines
1.1 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
import { clickStorage } from '@/lib/click-storage'
export async function GET(
request: NextRequest,
{ params }: { params: { linkId: string } }
) {
const { linkId } = params
try {
// Получаем целевую ссылку из параметров
const redirectUrl = request.nextUrl.searchParams.get('redirect')
if (!redirectUrl) {
console.error(`No redirect URL for link: ${linkId}`)
return NextResponse.redirect(new URL('/', request.url))
}
// Декодируем URL
const decodedUrl = decodeURIComponent(redirectUrl)
// Записываем клик через общий storage
const totalClicks = clickStorage.recordClick(linkId)
console.log(`Redirect: ${linkId} -> ${decodedUrl} (click #${totalClicks})`)
// Мгновенный серверный редирект на целевую ссылку
return NextResponse.redirect(decodedUrl)
} catch (error) {
console.error('Error processing tracking link:', error)
return NextResponse.redirect(new URL('/', request.url))
}
}