Files
gutscheintracker/lib/viewer.ts
T

41 lines
1.2 KiB
TypeScript

import { getDb } from "./db";
import { verifySession, SESSION_COOKIE, type SessionUser } from "./session";
import { cookies } from "next/headers";
import type { Viewer } from "./access";
async function sessionFromCookie(): Promise<SessionUser | null> {
const store = await cookies();
const token = store.get(SESSION_COOKIE)?.value;
if (!token) return null;
try {
return await verifySession(token);
} catch {
return null;
}
}
/**
* Aktueller Betrachter inkl. Haushaltsmitgliedschaft (genau ein Haushalt oder keiner).
* Gibt null zurück, wenn kein gültiges, aktuelles Login vorliegt.
*/
export async function getViewer(): Promise<Viewer | null> {
const sess = await sessionFromCookie();
if (!sess) return null;
const db = getDb();
const user = await db.user.findUnique({
where: { id: sess.uid },
include: { membership: { include: { household: true } } },
});
if (!user || user.tokenVersion !== sess.tokenVersion) return null;
return {
id: user.id,
name: user.name,
email: user.email,
role: user.role,
isServerAdmin: user.role === "admin",
householdId: user.membership?.householdId ?? null,
householdName: user.membership?.household.name ?? null,
householdRole: user.membership?.role ?? null,
};
}