- wrap root layout with QueryProvider for React Query - replace market UnderConstruction placeholder with MarketClient and real data fetching - implement search, pagination, and sort via search params using getActiveListings - add necessary client components and queries - update dependencies (e.g., prisma, pkg-types)
79 lines
2.1 KiB
TypeScript
79 lines
2.1 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server";
|
|
import { secureLogger } from "@/lib/secure-logger";
|
|
import { requireAuth } from "@/lib/auth/middleware";
|
|
import { getListings } from "@/lib/prisma/queries/listings";
|
|
|
|
/**
|
|
* GET /api/listings/my
|
|
* Lista anúncios do usuário autenticado
|
|
*/
|
|
export async function GET(request: NextRequest) {
|
|
try {
|
|
// Autenticação obrigatória
|
|
const authResult = await requireAuth(request);
|
|
|
|
if (authResult instanceof NextResponse) {
|
|
return authResult;
|
|
}
|
|
|
|
const auth = authResult;
|
|
|
|
const { searchParams } = new URL(request.url);
|
|
|
|
const filters = {
|
|
seller_id: auth.userId,
|
|
status: searchParams.get("status") as
|
|
| "active"
|
|
| "sold"
|
|
| "cancelled"
|
|
| "in_escrow"
|
|
| "expired"
|
|
| undefined,
|
|
page: searchParams.get("page")
|
|
? parseInt(searchParams.get("page")!, 10)
|
|
: 1,
|
|
pageSize: searchParams.get("pageSize")
|
|
? parseInt(searchParams.get("pageSize")!, 10)
|
|
: 20,
|
|
sortBy: (searchParams.get("sortBy") ||
|
|
"created_at") as
|
|
| "created_at"
|
|
| "price_pix"
|
|
| "price_tibia_coins"
|
|
| "price_gold_coins"
|
|
| "views_count",
|
|
sortOrder: (searchParams.get("sortOrder") || "DESC") as "ASC" | "DESC",
|
|
};
|
|
|
|
const listingsData = await getListings(filters);
|
|
|
|
return NextResponse.json(
|
|
{
|
|
success: true,
|
|
listings: listingsData.listings,
|
|
pagination: {
|
|
page: filters.page,
|
|
pageSize: filters.pageSize,
|
|
total: listingsData.total,
|
|
totalPages: Math.ceil(listingsData.total / filters.pageSize),
|
|
},
|
|
},
|
|
{ status: 200 }
|
|
);
|
|
} catch (error) {
|
|
secureLogger.error("❌ Erro ao buscar anúncios do usuário", {
|
|
error: error instanceof Error ? error.message : "Erro desconhecido",
|
|
stack: error instanceof Error ? error.stack : undefined,
|
|
});
|
|
|
|
return NextResponse.json(
|
|
{
|
|
success: false,
|
|
error: "Erro ao buscar anúncios",
|
|
},
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|
|
|