Files
modelo-nextjs/app/[codigo]/ir/route.ts
T
dado.cloud 02de2d5528 Modelo do encurtador em Next.js
Gerado a partir de deploy-templates/nextjs (dado.cloud ab2f4c0).
2026-10-21 14:40:16 +00:00

26 lines
1.0 KiB
TypeScript

import { buscarLink, FORMATO_CODIGO, registrarClique, type Link } from '@/lib/links';
import { respostaNaoEncontrada } from '@/lib/paginas';
type Contexto = { params: Promise<{ codigo: string }> };
function redirecionar(link: Link | null): Response {
if (!link) return respostaNaoEncontrada();
return new Response(null, {
status: 302,
headers: { Location: link.url, 'Cache-Control': 'no-store', 'Referrer-Policy': 'no-referrer' },
});
}
// O botão "Continuar" leva para GET /<código>/ir: aqui o servidor soma o
// clique e redireciona (302) para o link.
export async function GET(_request: Request, { params }: Contexto) {
const { codigo } = await params;
return redirecionar(FORMATO_CODIGO.test(codigo) ? registrarClique(codigo) : null);
}
// HEAD (robôs que só conferem o endereço) responde igual, mas não conta clique.
export async function HEAD(_request: Request, { params }: Contexto) {
const { codigo } = await params;
return redirecionar(FORMATO_CODIGO.test(codigo) ? buscarLink(codigo) : null);
}