53 lines
1.5 KiB
TypeScript
53 lines
1.5 KiB
TypeScript
// Public REST: a single guild (guilds) with its member count
|
|
// (guilds_members). AtomCMS JSON API parity. Returns { error } (404) when the
|
|
// id is unknown. The owner is the user_id column (accessor userId), surfaced
|
|
// here as ownerId.
|
|
import { apiJson } from "@/lib/api";
|
|
import { prisma } from "@/lib/prisma";
|
|
|
|
export const dynamic = "force-dynamic";
|
|
|
|
export async function GET(_req: Request, { params }: { params: Promise<{ id: string }> }) {
|
|
const { id } = await params;
|
|
|
|
if (!/^\d+$/.test(id)) {
|
|
return apiJson({ error: "Guild not found" }, { status: 404 });
|
|
}
|
|
const guildId = Number(id);
|
|
|
|
try {
|
|
const guild = await prisma.guilds.findUnique({
|
|
where: { id: guildId },
|
|
select: {
|
|
id: true,
|
|
name: true,
|
|
description: true,
|
|
userId: true,
|
|
roomId: true,
|
|
badge: true,
|
|
dateCreated: true,
|
|
},
|
|
});
|
|
|
|
if (!guild) {
|
|
return apiJson({ error: "Guild not found" }, { status: 404 });
|
|
}
|
|
|
|
// Member count is a separate guarded query (no relation is modelled).
|
|
let memberCount = 0;
|
|
try {
|
|
memberCount = await prisma.guildsMembers.count({
|
|
where: { guildId: guild.id },
|
|
});
|
|
} catch {
|
|
memberCount = 0;
|
|
}
|
|
|
|
const { userId, ...rest } = guild;
|
|
return apiJson({ data: { ...rest, ownerId: userId, memberCount } });
|
|
} catch {
|
|
// DB unavailable — treat as not found rather than a 500.
|
|
return apiJson({ error: "Guild not found" }, { status: 200 });
|
|
}
|
|
}
|