Ausweis ohne Nutzer Referenz speichern

This commit is contained in:
Moritz Utcke
2024-03-13 09:52:18 +07:00
parent 39f4435386
commit df8fa9cce1
5 changed files with 69 additions and 46 deletions

View 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...
```

View File

@@ -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;
}

View File

@@ -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}`;
}
}

View File

@@ -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">

View File

@@ -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");
}
---