37 lines
1.5 KiB
TypeScript
37 lines
1.5 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server";
|
|
import { getDb } from "@/lib/db";
|
|
import { getViewer } from "@/lib/viewer";
|
|
import { normalizeEmail } from "@/lib/invites";
|
|
|
|
/** Eigenes Profil inkl. Haushaltszugehörigkeit (für Formulare). */
|
|
export async function GET() {
|
|
const viewer = await getViewer();
|
|
if (!viewer) return NextResponse.json({ error: "unauthorized" }, { status: 401 });
|
|
return NextResponse.json({
|
|
id: viewer.id,
|
|
name: viewer.name,
|
|
email: viewer.email,
|
|
role: viewer.role,
|
|
isServerAdmin: viewer.isServerAdmin,
|
|
householdId: viewer.householdId,
|
|
householdName: viewer.householdName,
|
|
householdRole: viewer.householdRole,
|
|
});
|
|
}
|
|
|
|
/** Eigene E-Mail-Adresse setzen/ändern (für OIDC-Verknüpfung nötig). */
|
|
export async function PUT(req: NextRequest) {
|
|
const viewer = await getViewer();
|
|
if (!viewer) return NextResponse.json({ error: "unauthorized" }, { status: 401 });
|
|
const body = await req.json().catch(() => ({}));
|
|
const email = normalizeEmail(typeof body.email === "string" ? body.email : "");
|
|
if (!email) return NextResponse.json({ errors: ["email"] }, { status: 400 });
|
|
const db = getDb();
|
|
const taken = await db.user.findUnique({ where: { email } });
|
|
if (taken && taken.id !== viewer.id) {
|
|
return NextResponse.json({ errors: ["email"], message: "Diese E-Mail nutzt bereits ein anderes Konto." }, { status: 409 });
|
|
}
|
|
const updated = await db.user.update({ where: { id: viewer.id }, data: { email } });
|
|
return NextResponse.json({ ok: true, email: updated.email });
|
|
}
|