Benutzerdaten beim Speichern/Bestellen als Admin in Tabelle Benutzer speichern
This commit is contained in:
@@ -5,6 +5,7 @@ export const createCaller = createCallerFactory({
|
|||||||
"klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"),
|
"klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"),
|
||||||
"postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"),
|
"postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"),
|
||||||
"unterlage": await import("../src/pages/api/unterlage.ts"),
|
"unterlage": await import("../src/pages/api/unterlage.ts"),
|
||||||
|
"aufnahme": await import("../src/pages/api/aufnahme/index.ts"),
|
||||||
"admin/ausstellen": await import("../src/pages/api/admin/ausstellen.ts"),
|
"admin/ausstellen": await import("../src/pages/api/admin/ausstellen.ts"),
|
||||||
"admin/bedarfsausweis-ausstellen": await import("../src/pages/api/admin/bedarfsausweis-ausstellen.ts"),
|
"admin/bedarfsausweis-ausstellen": await import("../src/pages/api/admin/bedarfsausweis-ausstellen.ts"),
|
||||||
"admin/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"),
|
"admin/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"),
|
||||||
@@ -12,7 +13,6 @@ export const createCaller = createCallerFactory({
|
|||||||
"admin/nicht-ausstellen": await import("../src/pages/api/admin/nicht-ausstellen.ts"),
|
"admin/nicht-ausstellen": await import("../src/pages/api/admin/nicht-ausstellen.ts"),
|
||||||
"admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"),
|
"admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"),
|
||||||
"admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"),
|
"admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"),
|
||||||
"aufnahme": await import("../src/pages/api/aufnahme/index.ts"),
|
|
||||||
"ausweise": await import("../src/pages/api/ausweise/index.ts"),
|
"ausweise": await import("../src/pages/api/ausweise/index.ts"),
|
||||||
"auth/access-token": await import("../src/pages/api/auth/access-token.ts"),
|
"auth/access-token": await import("../src/pages/api/auth/access-token.ts"),
|
||||||
"auth/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.ts"),
|
"auth/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.ts"),
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ export async function benutzerSpeichern(benutzer: Partial<Benutzer>): Promise<st
|
|||||||
profilbild: benutzer.profilbild ?? null,
|
profilbild: benutzer.profilbild ?? null,
|
||||||
telefon: benutzer.telefon ?? null,
|
telefon: benutzer.telefon ?? null,
|
||||||
updated_at: new Date(),
|
updated_at: new Date(),
|
||||||
verified: false
|
verified: benutzer.verified ?? false,
|
||||||
};
|
};
|
||||||
|
|
||||||
await api.user.POST.fetch(completeBenutzer
|
await api.user.POST.fetch(completeBenutzer
|
||||||
|
|||||||
@@ -1,9 +1,27 @@
|
|||||||
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
||||||
import { checkAuthorizationHeader, checkAuthorizationHeaderNoThrow } from "#lib/middleware/authorization.js";
|
import { checkAuthorizationHeader, checkAuthorizationHeaderNoThrow } from "#lib/middleware/authorization.js";
|
||||||
import { AstroGlobal } from "astro";
|
import { AstroGlobal } from "astro";
|
||||||
|
import { Enums } from "#lib/client/prisma.js";
|
||||||
|
import { prisma } from "#lib/server/prisma.js";
|
||||||
|
|
||||||
export function getCurrentUser(Astro: AstroGlobal) {
|
export function getCurrentUser(Astro: AstroGlobal) {
|
||||||
const accessToken = Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value;
|
const accessToken = Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value;
|
||||||
|
|
||||||
return checkAuthorizationHeaderNoThrow(`Bearer ${accessToken}`)
|
return checkAuthorizationHeaderNoThrow(`Bearer ${accessToken}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getOtherUser(Astro: AstroGlobal, userId : string) {
|
||||||
|
const accessToken = Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value;
|
||||||
|
|
||||||
|
let currentUser = await checkAuthorizationHeaderNoThrow(`Bearer ${accessToken}`)
|
||||||
|
|
||||||
|
if (currentUser?.rolle == Enums.BenutzerRolle.ADMIN) {
|
||||||
|
const user = await prisma.benutzer.findUnique({
|
||||||
|
where: {
|
||||||
|
id: userId
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
@@ -36,6 +36,7 @@
|
|||||||
import { exclude } from "#lib/exclude.js";
|
import { exclude } from "#lib/exclude.js";
|
||||||
|
|
||||||
export let user: Partial<BenutzerClient>;
|
export let user: Partial<BenutzerClient>;
|
||||||
|
export let impersonatedUser: Partial<BenutzerClient> | null = null;
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
||||||
export let aufnahme: AufnahmeClient;
|
export let aufnahme: AufnahmeClient;
|
||||||
export let objekt: ObjektClient;
|
export let objekt: ObjektClient;
|
||||||
@@ -61,6 +62,10 @@
|
|||||||
ort = rechnung?.ort || localStorage.getItem("kundendaten.ort") || user.ort || "";
|
ort = rechnung?.ort || localStorage.getItem("kundendaten.ort") || user.ort || "";
|
||||||
zusatzzeile = rechnung?.zusatzzeile || localStorage.getItem("kundendaten.zusatzzeile") || ""
|
zusatzzeile = rechnung?.zusatzzeile || localStorage.getItem("kundendaten.zusatzzeile") || ""
|
||||||
telefon = rechnung?.telefon || localStorage.getItem("kundendaten.telefon") || user.telefon || "";
|
telefon = rechnung?.telefon || localStorage.getItem("kundendaten.telefon") || user.telefon || "";
|
||||||
|
} else if (impersonatedUser) {
|
||||||
|
vorname = impersonatedUser.vorname || "";
|
||||||
|
name = impersonatedUser.name || "";
|
||||||
|
telefon = impersonatedUser.telefon || "";
|
||||||
}
|
}
|
||||||
|
|
||||||
let abweichende_versand_adresse = JSON.parse(localStorage.getItem("kundendaten.abweichende_versand_adresse") || "false")
|
let abweichende_versand_adresse = JSON.parse(localStorage.getItem("kundendaten.abweichende_versand_adresse") || "false")
|
||||||
@@ -253,13 +258,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
let resultUser: Awaited<ReturnType<typeof benutzerSpeichern>> | Awaited<ReturnType<typeof benutzerSpeichern>> | null = null;
|
let resultUser: Awaited<ReturnType<typeof benutzerSpeichern>> | Awaited<ReturnType<typeof benutzerSpeichern>> | null = null;
|
||||||
|
let baseUser = (impersonatedUser?impersonatedUser:user)
|
||||||
|
|
||||||
const benutzerObjekt = exclude({
|
const benutzerObjekt = {
|
||||||
...user,
|
...baseUser,
|
||||||
name,
|
name,
|
||||||
vorname,
|
vorname,
|
||||||
telefon
|
telefon
|
||||||
}, ["rolle"]);
|
};
|
||||||
|
|
||||||
resultUser = await benutzerSpeichern(benutzerObjekt);
|
resultUser = await benutzerSpeichern(benutzerObjekt);
|
||||||
|
|
||||||
@@ -327,13 +333,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
let resultUser: Awaited<ReturnType<typeof benutzerSpeichern>> | Awaited<ReturnType<typeof benutzerSpeichern>> | null = null;
|
let resultUser: Awaited<ReturnType<typeof benutzerSpeichern>> | Awaited<ReturnType<typeof benutzerSpeichern>> | null = null;
|
||||||
|
let baseUser = (impersonatedUser?impersonatedUser:user)
|
||||||
|
|
||||||
const benutzerObjekt = exclude({
|
const benutzerObjekt = {
|
||||||
...user,
|
...baseUser,
|
||||||
name,
|
name,
|
||||||
vorname,
|
vorname,
|
||||||
telefon
|
telefon
|
||||||
}, ["rolle"]);
|
};
|
||||||
|
|
||||||
resultUser = await benutzerSpeichern(benutzerObjekt);
|
resultUser = await benutzerSpeichern(benutzerObjekt);
|
||||||
|
|
||||||
|
|||||||
@@ -9,10 +9,10 @@ import { Benutzer, prisma } from "#lib/server/prisma.js";
|
|||||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||||
import { BenutzerSchema } from "src/generated/zod/benutzer.js";
|
import { BenutzerSchema } from "src/generated/zod/benutzer.js";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
import { Enums } from "#lib/client/prisma.js";
|
||||||
|
|
||||||
export const POST = defineApiRoute({
|
export const POST = defineApiRoute({
|
||||||
input: BenutzerSchema.omit({
|
input: BenutzerSchema.omit({
|
||||||
id: true,
|
|
||||||
lex_office_id: true,
|
lex_office_id: true,
|
||||||
rolle: true,
|
rolle: true,
|
||||||
created_at: true
|
created_at: true
|
||||||
@@ -24,6 +24,7 @@ export const POST = defineApiRoute({
|
|||||||
}
|
}
|
||||||
|
|
||||||
const updateData: any = {};
|
const updateData: any = {};
|
||||||
|
updateData.id = user.id;
|
||||||
if (input.adresse) updateData.adresse = input.adresse;
|
if (input.adresse) updateData.adresse = input.adresse;
|
||||||
if (input.anrede) updateData.anrede = input.anrede;
|
if (input.anrede) updateData.anrede = input.anrede;
|
||||||
if (input.email) updateData.email = input.email;
|
if (input.email) updateData.email = input.email;
|
||||||
@@ -37,9 +38,16 @@ export const POST = defineApiRoute({
|
|||||||
if (input.telefon) updateData.telefon = input.telefon;
|
if (input.telefon) updateData.telefon = input.telefon;
|
||||||
if (input.verified) updateData.telefon = input.verified;
|
if (input.verified) updateData.telefon = input.verified;
|
||||||
|
|
||||||
|
//Admin may update other users
|
||||||
|
if (user.rolle == Enums.BenutzerRolle.ADMIN && input.id != user.id) {
|
||||||
|
updateData.id = input.id;
|
||||||
|
} else if(user.rolle != Enums.BenutzerRolle.ADMIN && input.id != user.id){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
await prisma.benutzer.update({
|
await prisma.benutzer.update({
|
||||||
where: {
|
where: {
|
||||||
id: user.id
|
id: updateData.id
|
||||||
},
|
},
|
||||||
data: updateData
|
data: updateData
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,10 +3,11 @@ import { getAusweisartFromId } from "#components/Ausweis/types";
|
|||||||
import AusweisLayoutPruefung from "#layouts/AusweisLayoutPruefung.astro";
|
import AusweisLayoutPruefung from "#layouts/AusweisLayoutPruefung.astro";
|
||||||
import { getPrismaAusweisAdapter } from "#lib/server/ausweis";
|
import { getPrismaAusweisAdapter } from "#lib/server/ausweis";
|
||||||
import { Enums } from "#lib/server/prisma";
|
import { Enums } from "#lib/server/prisma";
|
||||||
import { getCurrentUser } from "#lib/server/user";
|
import { getCurrentUser, getOtherUser } from "#lib/server/user";
|
||||||
import KundendatenModule from "#modules/KundendatenModule.svelte";
|
import KundendatenModule from "#modules/KundendatenModule.svelte";
|
||||||
import { PaymentStatus } from "@mollie/api-client";
|
import { PaymentStatus } from "@mollie/api-client";
|
||||||
import { AusweisTyp } from "src/generated/enums";
|
import { AusweisTyp } from "src/generated/enums";
|
||||||
|
import { BenutzerClient } from "#components/Ausweis/types.js";
|
||||||
|
|
||||||
const uid = Astro.url.searchParams.get("uid")
|
const uid = Astro.url.searchParams.get("uid")
|
||||||
|
|
||||||
@@ -45,8 +46,16 @@ if (!ausweis) {
|
|||||||
if (ausweis.rechnung.status === PaymentStatus.paid) {
|
if (ausweis.rechnung.status === PaymentStatus.paid) {
|
||||||
return Astro.redirect("/dashboard")
|
return Astro.redirect("/dashboard")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let impersonatedUser: Partial<BenutzerClient> | null = null;
|
||||||
|
|
||||||
|
if (user){
|
||||||
|
if (user.id !== ausweis.benutzer_id){
|
||||||
|
impersonatedUser = await getOtherUser(Astro, ausweis.benutzer_id) || {}
|
||||||
|
}
|
||||||
|
}
|
||||||
---
|
---
|
||||||
|
|
||||||
<AusweisLayoutPruefung title="Energieausweis Bezahlung">
|
<AusweisLayoutPruefung title="Energieausweis Bezahlung">
|
||||||
<KundendatenModule {user} {ausweis} objekt={ausweis.aufnahme.objekt} rechnung={ausweis.rechnung} aufnahme={ausweis.aufnahme} bilder={ausweis.aufnahme.bilder} {ausweisart} ausweistyp={AusweisTyp.Standard} aktiveBezahlmethode={Enums.Bezahlmethoden.paypal} client:only></KundendatenModule>
|
<KundendatenModule {user} {impersonatedUser} {ausweis} objekt={ausweis.aufnahme.objekt} rechnung={ausweis.rechnung} aufnahme={ausweis.aufnahme} bilder={ausweis.aufnahme.bilder} {ausweisart} ausweistyp={AusweisTyp.Standard} aktiveBezahlmethode={Enums.Bezahlmethoden.paypal} client:only></KundendatenModule>
|
||||||
</AusweisLayoutPruefung>
|
</AusweisLayoutPruefung>
|
||||||
|
|||||||
@@ -3,9 +3,10 @@
|
|||||||
import KundendatenModule from "#modules/KundendatenModule.svelte";
|
import KundendatenModule from "#modules/KundendatenModule.svelte";
|
||||||
import AusweisLayout from "#layouts/AusweisLayoutPruefung.astro";
|
import AusweisLayout from "#layouts/AusweisLayoutPruefung.astro";
|
||||||
import { Enums } from "#lib/client/prisma";
|
import { Enums } from "#lib/client/prisma";
|
||||||
import { getCurrentUser } from "#lib/server/user";
|
import { getCurrentUser, getOtherUser } from "#lib/server/user";
|
||||||
import { getAusweisartFromId } from "#components/Ausweis/types";
|
import { getAusweisartFromId } from "#components/Ausweis/types";
|
||||||
import { getAufnahme, getBedarfsausweisWohnen, getBilder, getObjekt, getRechnung, getUnterlagen, getVerbrauchsausweisGewerbe, getVerbrauchsausweisWohnen } from "#lib/server/db";
|
import { getAufnahme, getBedarfsausweisWohnen, getBilder, getObjekt, getRechnung, getUnterlagen, getVerbrauchsausweisGewerbe, getVerbrauchsausweisWohnen } from "#lib/server/db";
|
||||||
|
import { BenutzerClient } from "#components/Ausweis/types.js";
|
||||||
|
|
||||||
// Man sollte nur auf diese Seite kommen, wenn ein Ausweis bereits vorliegt und in der Datenbank abgespeichert wurde.
|
// Man sollte nur auf diese Seite kommen, wenn ein Ausweis bereits vorliegt und in der Datenbank abgespeichert wurde.
|
||||||
|
|
||||||
@@ -70,9 +71,16 @@ if (!params.has("ausweis") || !params.has("aufnahme") || !params.has("objekt") |
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let impersonatedUser: Partial<BenutzerClient> | null = null;
|
||||||
|
|
||||||
|
if (user){
|
||||||
|
if (user.id !== ausweis.benutzer_id){
|
||||||
|
impersonatedUser = await getOtherUser(Astro, ausweis.benutzer_id) || {}
|
||||||
|
}
|
||||||
|
}
|
||||||
---
|
---
|
||||||
|
|
||||||
<AusweisLayout title="Kundendaten Aufnehmen - IBCornelsen">
|
<AusweisLayout title="Kundendaten Aufnehmen - IBCornelsen">
|
||||||
<KundendatenModule {user} {ausweis} {objekt} {aufnahme} {bilder} {rechnung} {ausweisart} {unterlagen} {partner_code} aktiveBezahlmethode={Enums.Bezahlmethoden.paypal} client:only ></KundendatenModule>
|
<KundendatenModule {user} {impersonatedUser} {ausweis} {objekt} {aufnahme} {bilder} {rechnung} {ausweisart} {unterlagen} {partner_code} aktiveBezahlmethode={Enums.Bezahlmethoden.paypal} client:only ></KundendatenModule>
|
||||||
</AusweisLayout>
|
</AusweisLayout>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user