Ausweis ohne Nutzer Referenz speichern
This commit is contained in:
19
notes/ausweis-erstellung.md
Normal file
19
notes/ausweis-erstellung.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# Ausweis Erstellung
|
||||
|
||||
Wenn ein neuer Nutzer auf unsere Seite kommt und einen Ausweis erstellen möchte muss er sich nicht unbedingt sofort registrieren. Um den Kunden ein reibungsloses Erlebnis zu bieten versuchen wir den Nutzer automatisch anzulegen, allerdings kann es sein, dass der Ausweis nicht weiter bearbeitet wird. In diesem Fall müssen wir den Ausweis nach einer Zeit wieder löschen, damit er nicht für immer in unserer Datenbank bleibt.
|
||||
|
||||
```tefcha
|
||||
Nutzer Kommt auf unsere Seite
|
||||
|
||||
if Nutzer ist eingeloggt
|
||||
Ausweis wird erstellt und Nutzer zugewiesen
|
||||
else
|
||||
Ausweis erstellen
|
||||
-> Schritt 2
|
||||
if Nutzer registriert sich
|
||||
Ausweis wird verknüpft
|
||||
else
|
||||
Ausweis nach einer Woche gelöscht
|
||||
|
||||
usw...
|
||||
```
|
||||
@@ -5,9 +5,7 @@ import {
|
||||
UploadedGebaeudeBild,
|
||||
VerbrauchsausweisWohnenClient,
|
||||
} from "#components/Ausweis/types";
|
||||
import { dialogs } from "svelte-dialogs";
|
||||
import { validateAccessTokenClient } from "./validateAccessToken";
|
||||
import LoginDialog from "#components/LoginDialog.svelte";
|
||||
|
||||
import { exclude } from "#lib/exclude";
|
||||
import { client } from "src/trpc";
|
||||
import { bilderHochladen } from "./bilderHochladen";
|
||||
@@ -20,48 +18,28 @@ export async function verbrauchsausweisWohnenSpeichern(
|
||||
images: (UploadedGebaeudeBild & { base64?: string })[],
|
||||
user: BenutzerClient
|
||||
) {
|
||||
// Um einen Ausweis zu speichern müssen wir eingeloggt sein, andernfalls wird die API den call ablehnen.
|
||||
// Wir prüfen also ob wir eingeloggt sind und leiten den Nutzer ggf. auf die Login Seite weiter.
|
||||
if (!(await validateAccessTokenClient())) {
|
||||
// TOOD: Auf Dialog umstellen.
|
||||
const loggedIn = await dialogs.modal(LoginDialog);
|
||||
|
||||
if (!loggedIn) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (ausweis.uid) {
|
||||
// Anscheinend wurde der Ausweis bereits erstellt und hat eine UID.
|
||||
// Jetzt müssen wir ihn nun nur noch abspeichern.
|
||||
try {
|
||||
const gebaeudeBilderEntfernt = exclude(gebaeude, [
|
||||
"gebaeude_bilder",
|
||||
]);
|
||||
const gebaeudeAufnahmeGeneratedFieldsEntfernt = exclude(
|
||||
gebaeude_aufnahme_allgemein,
|
||||
["erstellungsdatum", "events"]
|
||||
);
|
||||
const ausweisGeneratedFieldsEntfernt = exclude(ausweis, [
|
||||
"rechnungen",
|
||||
"erstellungsdatum",
|
||||
]);
|
||||
|
||||
await client.v1.verbrauchsausweisWohnen[2016].speichern.mutate({
|
||||
...ausweisGeneratedFieldsEntfernt,
|
||||
...ausweis,
|
||||
gebaeude_aufnahme_allgemein: {
|
||||
...gebaeudeAufnahmeGeneratedFieldsEntfernt,
|
||||
...exclude(
|
||||
gebaeude_aufnahme_allgemein,
|
||||
["erstellungsdatum", "events", "ausstellungsdatum", "rechnungen"]
|
||||
),
|
||||
gebaeude_stammdaten: {
|
||||
...gebaeudeBilderEntfernt,
|
||||
...exclude(gebaeude, [
|
||||
"gebaeude_bilder",
|
||||
]),
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
console.log(ausweisGeneratedFieldsEntfernt);
|
||||
|
||||
images = await bilderHochladen(images, gebaeude);
|
||||
|
||||
return true;
|
||||
return { uid: ausweis.uid, gebaeude_uid: gebaeude.uid, gebaeude_aufnahme_uid: gebaeude_aufnahme_allgemein.uid };
|
||||
} catch (e) {
|
||||
// TODO: Ticket mit Fehldermeldung abschicken.
|
||||
}
|
||||
@@ -78,13 +56,10 @@ export async function verbrauchsausweisWohnenSpeichern(
|
||||
},
|
||||
},
|
||||
});
|
||||
ausweis.uid = response.uid;
|
||||
gebaeude.uid = response.gebaeude_uid;
|
||||
gebaeude_aufnahme_allgemein.uid = response.gebaeude_aufnahme_uid;
|
||||
|
||||
images = await bilderHochladen(images, gebaeude);
|
||||
|
||||
return true;
|
||||
return response;
|
||||
} catch (e: any) {
|
||||
await client.v1.tickets.erstellen.mutate({
|
||||
titel: "Ausweis konnte nicht gespeichert werden",
|
||||
@@ -107,5 +82,5 @@ export async function verbrauchsausweisWohnenSpeichern(
|
||||
timeout: 6000,
|
||||
type: "error",
|
||||
});
|
||||
return false;
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -38,8 +38,13 @@
|
||||
async function spaeterWeitermachen() {
|
||||
const result = await verbrauchsausweisWohnenSpeichern(ausweis, gebaeude, gebaeude_aufnahme_allgemein, images, user);
|
||||
|
||||
if (result === true) {
|
||||
window.history.pushState({}, "", `${location.pathname}?uid=${ausweis.uid}`);
|
||||
if (result !== null) {
|
||||
// Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
|
||||
// Sonst müsste er alles neu eingeben...
|
||||
ausweis.uid = result.uid
|
||||
gebaeude.uid = result.gebaeude_uid
|
||||
gebaeude_aufnahme_allgemein.uid = result.gebaeude_aufnahme_uid
|
||||
window.history.pushState({}, "", `${location.pathname}?uid=${result.uid}`);
|
||||
speichernOverlayHidden = false;
|
||||
}
|
||||
}
|
||||
@@ -74,11 +79,14 @@
|
||||
if (e && e.preventDefault) e.preventDefault();
|
||||
const result = await verbrauchsausweisWohnenSpeichern(ausweis, gebaeude, gebaeude_aufnahme_allgemein, images, user);
|
||||
|
||||
if (result === true) {
|
||||
if (result !== null) {
|
||||
// Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
|
||||
// Sonst müsste er alles neu eingeben...
|
||||
window.history.pushState({}, "", `${location.pathname}?uid=${ausweis.uid}`);
|
||||
window.location.href = `/kundendaten?uid=${ausweis.uid}`;
|
||||
ausweis.uid = result.uid
|
||||
gebaeude.uid = result.gebaeude_uid
|
||||
gebaeude_aufnahme_allgemein.uid = result.gebaeude_aufnahme_uid
|
||||
window.history.pushState({}, "", `${location.pathname}?uid=${result.uid}`);
|
||||
window.location.href = `/kundendaten?uid=${result.uid}`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
Bezahlmethoden,
|
||||
} from "@ibcornelsen/database/client";
|
||||
import { Enums } from "@ibcornelsen/database/client";
|
||||
import { dialogs } from "svelte-dialogs";
|
||||
import LoginDialog from "#components/LoginDialog.svelte";
|
||||
|
||||
export let user: BenutzerClient;
|
||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||
@@ -40,6 +42,8 @@
|
||||
|
||||
import { PRICES } from "#lib/constants";
|
||||
import { BenutzerClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
|
||||
import { validateAccessTokenClient } from "src/client/lib/validateAccessToken";
|
||||
import { client } from "src/trpc";
|
||||
|
||||
let prices: number[] = []
|
||||
|
||||
@@ -56,12 +60,29 @@
|
||||
0
|
||||
);
|
||||
|
||||
function speichern(e: SubmitEvent) {
|
||||
async function speichern(e: SubmitEvent) {
|
||||
e.preventDefault()
|
||||
console.log("Speichern");
|
||||
|
||||
|
||||
// Um einen Ausweis zu speichern müssen wir eingeloggt sein, andernfalls wird die API den call ablehnen.
|
||||
// Wir prüfen also ob wir eingeloggt sind und leiten den Nutzer ggf. auf die Login Seite weiter.
|
||||
if (!(await validateAccessTokenClient())) {
|
||||
// TOOD: Auf Dialog umstellen.
|
||||
const loggedIn = await dialogs.modal(LoginDialog);
|
||||
|
||||
if (!loggedIn) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Falls der Ausweis noch keine benutzer_id hat müssen wir ihn claimen, damit er dem jetzigen Nutzer zugewiesen wird...
|
||||
await client.v1.verbrauchsausweisWohnen.claim.mutate({
|
||||
uid: ausweis.uid
|
||||
})
|
||||
|
||||
window.location.href = `/kaufabschluss?uid=${ausweis.uid}`;
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<div class="w-full px-8">
|
||||
|
||||
@@ -21,7 +21,7 @@ const ausweis = await caller.v1.verbrauchsausweisWohnen.get({
|
||||
const user = await caller.v1.benutzer.self();
|
||||
|
||||
|
||||
if (!ausweis || !user) {
|
||||
if (!ausweis) {
|
||||
return Astro.redirect("/404");
|
||||
}
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user