Files
gutscheintracker/app/api/users/me/route.ts
T

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 });
}