refactor(db): migrate app pages and APIs from Prisma facade to Drizzle (3)

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
SimoandCursor committed 2026-08-01 14:15:32 +02:00
1 parent 2cd0863cb8
commit 580972c0a0
40 files changed
+1089 -808

No files matched your search

+55 -38
View File
@@ -1,11 +1,12 @@
import { asc, count, eq, inArray } from "drizzle-orm";
import Link from "next/link";
import { notFound, redirect } from "next/navigation";
import { getTranslations } from "next-intl/server";
import { disbandGuild } from "@/actions/admin-guilds";
import { Button } from "@/components/ui/button";
import { db, Guilds, GuildsForumsThreads, GuildsMembers, User } from "@/lib/db";
import { formatDate } from "@/lib/format-date";
import { canAccess, getAdminContext, PERMS } from "@/lib/permissions";
import { prisma } from "@/lib/prisma";
export default async function AdminGuildDetailPage({
params,
@@ -23,49 +24,65 @@ export default async function AdminGuildDetailPage({
const id = Number(rawId);
if (!Number.isFinite(id) || id <= 0) notFound();
const guild = await prisma.guilds.findUnique({
where: { id },
select: {
id: true,
name: true,
description: true,
userId: true,
roomId: true,
badge: true,
dateCreated: true,
state: true,
forum: true,
},
});
const [guild] = await db
.select({
id: Guilds.id,
name: Guilds.name,
description: Guilds.description,
userId: Guilds.userId,
roomId: Guilds.roomId,
badge: Guilds.badge,
dateCreated: Guilds.dateCreated,
state: Guilds.state,
forum: Guilds.forum,
})
.from(Guilds)
.where(eq(Guilds.id, id))
.limit(1);
if (!guild) notFound();
const [owner, members, memberCount, threadCount] = await Promise.all([
prisma.user
.findUnique({
where: { id: guild.userId },
select: { id: true, username: true },
})
.catch(() => null),
prisma.guildsMembers
.findMany({
where: { guildId: id },
orderBy: [{ levelId: "asc" }, { memberSince: "asc" }],
take: 100,
select: { userId: true, levelId: true, memberSince: true },
})
.catch(() => []),
prisma.guildsMembers.count({ where: { guildId: id } }).catch(() => 0),
prisma.guildsForumsThreads.count({ where: { guildId: id } }).catch(() => 0),
]);
const [ownerRows, members, memberCountRows, threadCountRows] =
await Promise.all([
db
.select({ id: User.id, username: User.username })
.from(User)
.where(eq(User.id, guild.userId))
.limit(1)
.catch(() => []),
db
.select({
userId: GuildsMembers.userId,
levelId: GuildsMembers.levelId,
memberSince: GuildsMembers.memberSince,
})
.from(GuildsMembers)
.where(eq(GuildsMembers.guildId, id))
.orderBy(asc(GuildsMembers.levelId), asc(GuildsMembers.memberSince))
.limit(100)
.catch(() => []),
db
.select({ total: count() })
.from(GuildsMembers)
.where(eq(GuildsMembers.guildId, id))
.catch(() => [{ total: 0 }]),
db
.select({ total: count() })
.from(GuildsForumsThreads)
.where(eq(GuildsForumsThreads.guildId, id))
.catch(() => [{ total: 0 }]),
]);
const owner = ownerRows[0] ?? null;
const memberCount = Number(memberCountRows[0]?.total ?? 0);
const threadCount = Number(threadCountRows[0]?.total ?? 0);
const memberUserIds = members.map((m) => m.userId).filter((uid) => uid > 0);
const memberUsers =
memberUserIds.length > 0
? await prisma.user
.findMany({
where: { id: { in: memberUserIds } },
select: { id: true, username: true },
})
? await db
.select({ id: User.id, username: User.username })
.from(User)
.where(inArray(User.id, memberUserIds))
.catch(() => [])
: [];
const usernameById = new Map(memberUsers.map((u) => [u.id, u.username]));