Files
WatchLink/src/lib/shell.ts
MrSphay 9fbd79c7ef
All checks were successful
Template Compliance / compliance (push) Successful in 5s
Build / build (push) Successful in 12m36s
Release Dry Run / release-dry-run (push) Successful in 1m33s
Redesign WatchLink application UI
2026-05-15 20:13:29 +02:00

37 lines
1.2 KiB
TypeScript

import { prisma } from "./prisma";
import { getCurrentUser, userIsAdmin } from "./session";
type CurrentUser = NonNullable<Awaited<ReturnType<typeof getCurrentUser>>>;
export async function getShellContext(user: CurrentUser) {
const [rooms, pendingRequests, activeRoomCount] = await Promise.all([
prisma.room.findMany({
where: {
OR: [{ ownerId: user.id }, { members: { some: { userId: user.id } } }, { visibility: "PUBLIC" }]
},
include: { _count: { select: { members: true, mediaSources: true } } },
orderBy: [{ ownerId: "desc" }, { updatedAt: "desc" }],
take: 8
}),
prisma.friendship.count({ where: { receiverId: user.id, status: "PENDING" } }),
prisma.room.count({ where: { mediaSources: { some: {} } } })
]);
return {
isAdmin: userIsAdmin(user),
userName: user.displayName || user.username,
pendingRequests,
activeRoomCount,
rooms: rooms.map((room) => ({
id: room.id,
name: room.name,
slug: room.slug,
href: `/rooms/${encodeURIComponent(room.slug)}`,
visibility: room.visibility,
participantCount: room._count.members + 1,
queueCount: room._count.mediaSources,
isPersonal: room.ownerId === user.id
}))
};
}