34 lines
1.1 KiB
TypeScript
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))
|
|
}
|
|
} |