From d76b8b4e146ad2fd21ed6f9fe609a634b62d2923 Mon Sep 17 00:00:00 2001 From: Carl Mahnke Date: Wed, 14 May 2025 13:53:19 +0200 Subject: [PATCH] Benutzerdaten beim Speichern/Bestellen in Tabelle Benutzer speichern --- src/client/lib/speichern.ts | 30 +++++++++++++++++++++- src/modules/KundendatenModule.svelte | 27 +++++++++++++++++++- src/pages/api/user/index.ts | 37 +++++++++++++++------------- 3 files changed, 75 insertions(+), 19 deletions(-) diff --git a/src/client/lib/speichern.ts b/src/client/lib/speichern.ts index 31708641..14b72f79 100644 --- a/src/client/lib/speichern.ts +++ b/src/client/lib/speichern.ts @@ -1,5 +1,5 @@ import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js"; -import { Aufnahme, Objekt } from "#lib/client/prisma.js"; +import { Aufnahme, Benutzer, Objekt } from "#lib/client/prisma.js"; import { api } from "astro-typesafe-api/client"; import Cookies from "js-cookie"; @@ -161,4 +161,32 @@ export async function objektSpeichern(objekt: Objekt & { id?: string }): Promise return id; } +} + +export async function benutzerSpeichern(benutzer: Partial): Promise { + const completeBenutzer: Benutzer = { + id: benutzer.id, + name: benutzer.name ?? null, + email: benutzer.email, + passwort: benutzer.passwort, + adresse: benutzer.adresse ?? null, + anrede: benutzer.anrede ?? null, + firma: benutzer.firma ?? null, + vorname: benutzer.vorname ?? null, + ort: benutzer.ort ?? null, + plz: benutzer.plz ?? null, + profilbild: benutzer.profilbild ?? null, + telefon: benutzer.telefon ?? null, + updated_at: new Date(), + verified: false + }; + + await api.user.POST.fetch(completeBenutzer + , { + headers: { + Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` + } + }); + + return benutzer.id; } \ No newline at end of file diff --git a/src/modules/KundendatenModule.svelte b/src/modules/KundendatenModule.svelte index 2e79158b..a0cd97d7 100644 --- a/src/modules/KundendatenModule.svelte +++ b/src/modules/KundendatenModule.svelte @@ -32,7 +32,9 @@ import { getMaximumDevitationInPercent } from "#client/lib/helpers.js"; import { endEnergieVerbrauchVerbrauchsausweis_2016_Client } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016_Client.js"; import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016_Client } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016_Client.js"; - + import { benutzerSpeichern } from "#client/lib/speichern.js"; + import { exclude } from "#lib/exclude.js"; + export let user: Partial; export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen; export let aufnahme: AufnahmeClient; @@ -249,6 +251,18 @@ } else { result = await ausweisSpeichern(ausweis, objekt, aufnahme, bilder, unterlagen, ausweisart) } + + let resultUser: Awaited> | Awaited> | null = null; + + const benutzerObjekt = exclude({ + ...user, + name, + vorname, + telefon + }, ["rolle"]); + + resultUser = await benutzerSpeichern(benutzerObjekt); + } catch(e) { addNotification({ dismissable: true, @@ -312,6 +326,17 @@ } } + let resultUser: Awaited> | Awaited> | null = null; + + const benutzerObjekt = exclude({ + ...user, + name, + vorname, + telefon + }, ["rolle"]); + + resultUser = await benutzerSpeichern(benutzerObjekt); + if (rechnung && rechnung.status === "paid") { window.location.href = "/dashboard" return; diff --git a/src/pages/api/user/index.ts b/src/pages/api/user/index.ts index 4c769cc5..69c986b7 100644 --- a/src/pages/api/user/index.ts +++ b/src/pages/api/user/index.ts @@ -5,7 +5,7 @@ import { adminMiddleware, authorizationMiddleware } from "#lib/middleware/author import { hashPassword } from "#lib/password.js"; import { createLexOfficeCustomer } from "#lib/server/lexoffice.js"; import { sendRegisterMail } from "#lib/server/mail/registrierung.js"; -import { prisma } from "#lib/server/prisma.js"; +import { Benutzer, prisma } from "#lib/server/prisma.js"; import { APIError, defineApiRoute } from "astro-typesafe-api/server"; import { BenutzerSchema } from "src/generated/zod/benutzer.js"; import { z } from "zod"; @@ -15,8 +15,7 @@ export const POST = defineApiRoute({ id: true, lex_office_id: true, rolle: true, - created_at: true, - updated_at: true + created_at: true }), middleware: authorizationMiddleware, async fetch(input, context, user) { @@ -24,24 +23,28 @@ export const POST = defineApiRoute({ // TODO: Email wurde geändert, neue Bestätigunsmail schicken. } + const updateData: any = {}; + if (input.adresse) updateData.adresse = input.adresse; + if (input.anrede) updateData.anrede = input.anrede; + if (input.email) updateData.email = input.email; + if (input.firma) updateData.firma = input.firma; + if (input.name) updateData.name = input.name; + if (input.vorname) updateData.vorname = input.vorname; + if (input.ort) updateData.ort = input.ort; + // if (input.passwort) updateData.passwort = hashPassword(input.passwort); + if (input.plz) updateData.plz = input.plz; + if (input.profilbild) updateData.profilbild = input.profilbild; + if (input.telefon) updateData.telefon = input.telefon; + if (input.verified) updateData.telefon = input.verified; + 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, - } - }) + data: updateData + }); + + }, })