// Public REST: hotel guilds (guilds). AtomCMS JSON API parity — read-only, // paginated list ordered newest first (by id), exposing the basic public // fields. The owner is stored as the user_id column (accessor userId), surfaced // here as ownerId for API clarity. import { count, desc } from "drizzle-orm"; import { apiJson, pagination } from "@/lib/api"; import { db, Guilds } from "@/lib/db"; export async function GET(req: Request) { const sp = new URL(req.url).searchParams; const { page, perPage, skip, take } = pagination(sp); try { const [totalRows, rows] = await Promise.all([ db.select({ total: count() }).from(Guilds), db .select({ id: Guilds.id, name: Guilds.name, description: Guilds.description, userId: Guilds.userId, }) .from(Guilds) .orderBy(desc(Guilds.id)) .limit(take) .offset(skip), ]); const total = totalRows[0]?.total ?? 0; // Rename userId → ownerId for the public payload. const data = rows.map(({ userId, ...rest }) => ({ ...rest, ownerId: userId, })); return apiJson({ data, meta: { page, perPage, total, lastPage: Math.max(1, Math.ceil(total / perPage)), }, }); } catch { // DB unreachable — never 500; return an empty, well-formed payload. return apiJson( { data: [], meta: { page, perPage, total: 0, lastPage: 1 } }, { status: 200 }, ); } }