80 lines
1.8 KiB
TypeScript
80 lines
1.8 KiB
TypeScript
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 }
|
|
},
|
|
}) |