import { type NextRequest, NextResponse } from "next/server"; import { requireAuth } from "@/lib/auth/middleware"; import { getListingById, updateListing } from "@/lib/prisma/queries/listings"; import { secureLogger } from "@/lib/secure-logger"; /** * POST /api/listings/:id/pause * Pausa um anúncio (apenas dono) */ export async function POST( request: NextRequest, { params }: { params: Promise<{ id: string }> }, ) { try { // Autenticação obrigatória const authResult = await requireAuth(request); if (authResult instanceof NextResponse) { return authResult; } const auth = authResult; const { id } = await params; const listingId = parseInt(id, 10); if (Number.isNaN(listingId)) { return NextResponse.json( { success: false, error: "ID de anúncio inválido", }, { status: 400 }, ); } // Verificar se o anúncio existe e pertence ao usuário const listing = await getListingById(listingId); if (!listing) { return NextResponse.json( { success: false, error: "Anúncio não encontrado", }, { status: 404 }, ); } if (listing.seller_id !== auth.userId) { return NextResponse.json( { success: false, error: "Você não tem permissão para pausar este anúncio", }, { status: 403 }, ); } if (listing.listing_status !== "active") { return NextResponse.json( { success: false, error: "Apenas anúncios ativos podem ser pausados", }, { status: 400 }, ); } // Pausar anúncio (usando status 'cancelled' temporariamente, ou podemos criar um novo status 'paused') // Por enquanto, vamos usar 'cancelled' mas manter os dados para poder reativar const updated = await updateListing(listingId, { listing_status: "cancelled", }); if (!updated) { return NextResponse.json( { success: false, error: "Erro ao pausar anúncio", }, { status: 500 }, ); } secureLogger.info("✅ Anúncio pausado", { listingId, userId: auth.userId, }); return NextResponse.json( { success: true, listing: updated, message: "Anúncio pausado com sucesso", }, { status: 200 }, ); } catch (error) { secureLogger.error("❌ Erro ao pausar anúncio", { error: error instanceof Error ? error.message : "Erro desconhecido", }); return NextResponse.json( { success: false, error: "Erro ao pausar anúncio", }, { status: 500 }, ); } }