import { UUidWithPrefix } from "#components/Ausweis/types.js"; import { authorizationMiddleware } from "#lib/middleware/authorization.js"; import { hashPassword } from "#lib/password.js"; import { sendRegisterMail } from "#lib/server/mail/registrierung.js"; import { BenutzerSchema, prisma } from "#lib/server/prisma.js"; import { APIError, defineApiRoute } from "astro-typesafe-api/server"; import { z } from "zod"; export const POST = defineApiRoute({ input: BenutzerSchema.omit({ id: true, lex_office_id: true, uid: true, rolle: true }), middleware: authorizationMiddleware, async fetch(input, context, user) { if (user.email !== input.email) { // TODO: Email wurde geändert, neue Bestätigunsmail schicken. } await prisma.benutzer.update({ where: { id: user.id }, data: { adresse: input.adresse, anrede: input.anrede, email: input.email, firma: input.firma, name: input.name, vorname: input.vorname, ort: input.ort, passwort: hashPassword(input.passwort), plz: input.plz, profilbild: input.profilbild, telefon: input.telefon, } }) }, }) export const PUT = defineApiRoute({ input: z.object({ email: z.string().email(), passwort: z.string().min(8), vorname: z.string(), name: z.string() }), output: z.object({ uid: UUidWithPrefix }), async fetch(input) { const existingUser = await prisma.benutzer.findUnique({ where: { email: input.email } }) if (existingUser) { throw new APIError({ code: "CONFLICT", message: "Email Adresse ist bereits vergeben." }) } const user = await prisma.benutzer.create({ data: { email: input.email, passwort: hashPassword(input.passwort), vorname: input.vorname, name: input.name } }) await sendRegisterMail(user) return { uid: user.uid } }, })