Files
Felipe Carvalho 038ce3f556 feat: initial commit — asaas-checkout template white-label
Template genérico de checkout com ASAAS, parametrizado via env vars.
Inclui fluxo completo: checkout → pedido → polling → webhook → admin.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 06:40:41 +02:00

49 lines
1.6 KiB
TypeScript

import { NextResponse } from "next/server"
import { createServiceClient } from "@/lib/supabase"
import { buscarPagamentoAsaas, mapearStatus } from "@/lib/asaas"
export async function GET(
_request: Request,
{ params }: { params: Promise<{ id: string }> }
) {
const { id } = await params
const supabase = createServiceClient()
const { data, error } = await supabase
.from("pedidos")
.select(
"id, status, valor_centavos, metodo_pagamento, pix_copia_cola, pix_qrcode_url, asaas_invoice_url, asaas_payment_id, paid_at, clientes(nome, email), produtos(nome, validade, midia)"
)
.eq("id", id)
.single()
if (error || !data) {
return NextResponse.json({ error: "Pedido não encontrado" }, { status: 404 })
}
// Se ainda está pendente, consulta o ASAAS diretamente para pegar status atualizado
if (data.status === "PENDING" && data.asaas_payment_id) {
try {
const asaasPayment = await buscarPagamentoAsaas(data.asaas_payment_id)
const novoStatus = mapearStatus(asaasPayment.status)
if (novoStatus !== "PENDING") {
const isPago = novoStatus === "RECEIVED" || novoStatus === "CONFIRMED"
const updateData: Record<string, unknown> = { status: novoStatus }
if (isPago) updateData.paid_at = new Date().toISOString()
await supabase
.from("pedidos")
.update(updateData)
.eq("id", id)
return NextResponse.json({ ...data, status: novoStatus, paid_at: isPago ? updateData.paid_at : null })
}
} catch {
// Falha silenciosa — retorna o que tem no banco
}
}
return NextResponse.json(data)
}