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

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
SimoandCursor committed 2026-08-01 14:15:39 +02:00
1 parent 9aa4f331bf
commit 30b54e99e7
40 files changed
+1183 -784

No files matched your search

+13 -4
View File
@@ -1,3 +1,4 @@
import { count, eq } from "drizzle-orm";
import Image from "next/image";
import Link from "next/link";
import type { Session } from "next-auth";
@@ -7,9 +8,9 @@ import { MobileNav } from "@/components/mobile-nav";
import { NavDropdown } from "@/components/nav-dropdown";
import { NavbarColorPicker } from "@/components/navbar-color-picker";
import { ThemeSwitcher } from "@/components/theme-switcher";
import { db, MessengerFriendrequests, MessengerOffline } from "@/lib/db";
import { resolveHotelName } from "@/lib/hotel-name";
import { canAccess, getApiAdminContext, PERMS } from "@/lib/permissions";
import { prisma } from "@/lib/prisma";
export async function Navigation({ session }: { session: Session | null }) {
const t = await getTranslations("nav");
@@ -45,10 +46,18 @@ export async function Navigation({ session }: { session: Session | null }) {
if (session?.user?.id) {
const id = Number(session.user.id);
try {
[unreadMessages, pendingFriendRequests] = await Promise.all([
prisma.messengerOffline.count({ where: { userId: id } }),
prisma.messengerFriendrequests.count({ where: { userToId: id } }),
const [unreadRows, pendingRows] = await Promise.all([
db
.select({ total: count() })
.from(MessengerOffline)
.where(eq(MessengerOffline.userId, id)),
db
.select({ total: count() })
.from(MessengerFriendrequests)
.where(eq(MessengerFriendrequests.userToId, id)),
]);
unreadMessages = unreadRows[0]?.total ?? 0;
pendingFriendRequests = pendingRows[0]?.total ?? 0;
} catch {}
}
+9 -4
View File
@@ -1,9 +1,10 @@
import { count, eq } from "drizzle-orm";
import Image from "next/image";
import Link from "next/link";
import { getTranslations } from "next-intl/server";
import { cached } from "@/lib/cache";
import { db, User } from "@/lib/db";
import { resolveHotelName } from "@/lib/hotel-name";
import { prisma } from "@/lib/prisma";
import { siteSettings } from "@/lib/services/site-settings";
export async function SiteHeader() {
@@ -16,9 +17,13 @@ export async function SiteHeader() {
let online: number;
try {
online = await cached("online_count", 10_000, () =>
prisma.user.count({ where: { online: "1" } }),
);
online = await cached("online_count", 10_000, async () => {
const [row] = await db
.select({ total: count() })
.from(User)
.where(eq(User.online, "1"));
return row?.total ?? 0;
});
} catch {
online = 0;
}
+54 -24
View File
@@ -1,3 +1,4 @@
import { count, eq, inArray } from "drizzle-orm";
import Image from "next/image";
import Link from "next/link";
import type { Session } from "next-auth";
@@ -5,10 +6,16 @@ import { getTranslations } from "next-intl/server";
import { RoomQuickEntry } from "@/components/room-quick-entry";
import { signOut } from "@/lib/auth";
import { cached } from "@/lib/cache";
import {
db,
MessengerFriendrequests,
MessengerOffline,
User,
UsersCurrency,
} from "@/lib/db";
import { avatarImageUrl } from "@/lib/format";
import { resolveHotelName } from "@/lib/hotel-name";
import { canAccess, getApiAdminContext, PERMS } from "@/lib/permissions";
import { prisma } from "@/lib/prisma";
import { siteSettings } from "@/lib/services/site-settings";
function Currency({
@@ -52,12 +59,16 @@ export async function TopHeader({ session }: { session: Session | null }) {
let diamonds = 0;
let look = "";
try {
const [user, currencies] = await Promise.all([
prisma.user.findUnique({
where: { id },
select: { credits: true, look: true },
}),
prisma.usersCurrency.findMany({ where: { userId: id } }),
const [[user], currencies] = await Promise.all([
db
.select({ credits: User.credits, look: User.look })
.from(User)
.where(eq(User.id, id))
.limit(1),
db
.select({ type: UsersCurrency.type, amount: UsersCurrency.amount })
.from(UsersCurrency)
.where(eq(UsersCurrency.userId, id)),
]);
credits = user?.credits ?? 0;
look = user?.look ?? "";
@@ -100,9 +111,13 @@ export async function TopHeader({ session }: { session: Session | null }) {
let online: number;
try {
online = await cached("online_count", 10_000, () =>
prisma.user.count({ where: { online: "1" } }),
);
online = await cached("online_count", 10_000, async () => {
const [row] = await db
.select({ total: count() })
.from(User)
.where(eq(User.online, "1"));
return row?.total ?? 0;
});
} catch {
online = 0;
}
@@ -110,26 +125,41 @@ export async function TopHeader({ session }: { session: Session | null }) {
let unreadMessages = 0;
let pendingFriendRequests = 0;
try {
[unreadMessages, pendingFriendRequests] = await Promise.all([
prisma.messengerOffline.count({ where: { userId: id } }),
prisma.messengerFriendrequests.count({ where: { userToId: id } }),
const [unreadRows, pendingRows] = await Promise.all([
db
.select({ total: count() })
.from(MessengerOffline)
.where(eq(MessengerOffline.userId, id)),
db
.select({ total: count() })
.from(MessengerFriendrequests)
.where(eq(MessengerFriendrequests.userToId, id)),
]);
unreadMessages = unreadRows[0]?.total ?? 0;
pendingFriendRequests = pendingRows[0]?.total ?? 0;
} catch {}
const friendRequests = await prisma.messengerFriendrequests
.findMany({
where: { userToId: id },
select: { userFromId: true },
})
.catch(() => []);
const friendRequests = await db
.select({ userFromId: MessengerFriendrequests.userFromId })
.from(MessengerFriendrequests)
.where(eq(MessengerFriendrequests.userToId, id))
.catch(() => [] as { userFromId: number }[]);
const friendRequestUsers = friendRequests.length
? await prisma.user
.findMany({
where: { id: { in: friendRequests.map((r) => r.userFromId) } },
select: { id: true, username: true, look: true },
? await db
.select({
id: User.id,
username: User.username,
look: User.look,
})
.catch(() => [])
.from(User)
.where(
inArray(
User.id,
friendRequests.map((r) => r.userFromId),
),
)
.catch(() => [] as { id: number; username: string; look: string }[])
: [];
const totalNotifications = unreadMessages + pendingFriendRequests;