TypeScript 50.6%
JavaScript 46.1%
SQL 2.1%
Shell 0.6%
CSS 0.5%
1import { NextRequest, NextResponse } from "next/server";2import { assertSameOrigin, requireUser } from "@/lib/auth/session";3import { createListing, myListings } from "@/lib/listings/service";4import { ListingInput } from "@/lib/listings/types";5import { mediaUrl } from "@/lib/listings/media";6import { handle, parseBody } from "@/lib/api";7export const dynamic = "force-dynamic";8export async function GET() { try { const u = await requireUser(); const rows = await myListings(u.id); return NextResponse.json({ items: rows.map((r) => ({ ...r.l, property: r.p, mediaCount: r.mediaCount, cover: r.cover ? mediaUrl(r.cover, 320) : null })) }); } catch (e) { return handle(e); } }9export async function POST(req: NextRequest) { try { await assertSameOrigin(); const u = await requireUser(); const input = await parseBody(req, ListingInput); const l = await createListing(u.id, input); return NextResponse.json({ listing: l }, { status: 201 }); } catch (e) { return handle(e); } }10