From 54b26bdf42dd6830964b4f72e44dc5082de2e655 Mon Sep 17 00:00:00 2001 From: Moritz Utcke Date: Sat, 13 Jan 2024 12:56:54 +0700 Subject: [PATCH] Database imports gefixt + Ausweis speichern verbessert --- docker-compose.yml | 13 +++- package.json | 2 +- src/components/AnsichtsausweisButton.svelte | 2 +- .../Ausweis/AusweisPreviewContainer.svelte | 2 +- src/components/Ausweis/Ausweisart.svelte | 6 +- .../Ausweis/BilderZusatzsysteme.svelte | 2 +- src/components/Ausweis/DaemmungImage.svelte | 2 +- src/components/Ausweis/FensterImage.svelte | 2 +- src/components/Ausweis/HeizungImage.svelte | 2 +- .../Ausweis/PerformanceScore.svelte | 2 +- src/components/Ausweis/Verbrauch.svelte | 2 +- .../BedarfsausweisContent.svelte | 2 +- src/components/DatenblattButton.svelte | 2 +- src/components/ImageGrid.svelte | 2 +- .../Kaufabschluss/PriceContainer.svelte | 2 +- src/components/Overlay.svelte | 10 ++- src/components/PaymentOption.svelte | 2 +- src/components/UploadImages.svelte | 2 +- .../audits/BedarfsausweisBenoetigt.ts | 2 +- .../audits/HeizungGebaeudeBaujahr.ts | 2 +- .../audits/VerbrauchAbweichung.ts | 3 +- src/cronjobs/update-dwd-klimafaktoren.ts | 2 +- .../VerbrauchsausweisWohnen_2016.ts | 4 +- .../VerbrauchsausweisWohnen_2023.ts | 2 +- src/lib/Berechnungen/endEnergieVerbrauch.ts | 2 +- src/lib/User/index.ts | 7 +- src/lib/XML/AusweisBerechnungen2016.ts | 3 +- .../xmlVerbrauchsausweisWohnen_2016.ts | 4 +- src/lib/XML/getEmpfehlungen.ts | 2 +- src/lib/constants.ts | 3 +- src/lib/exclude.ts | 8 +++ src/lib/login.ts | 5 +- src/lib/validateAccessToken.ts | 42 +++++++++++ .../Ausweise/AusweisGespeichertModule.svelte | 15 ++++ .../VerbrauchsausweisWohnenModule.svelte | 71 ++++++++----------- src/modules/EmbeddedAuthFlowModule.svelte | 26 +++++++ src/modules/EmbeddedLoginModule.svelte | 13 ++-- src/modules/EmbeddedRegisterModule.svelte | 14 ++-- src/modules/KundendatenModule.svelte | 3 +- .../VerbrauchsausweisGewerbeModule.svelte | 2 +- .../VerbrauchsausweisWohnenFlowModule.svelte | 64 ----------------- src/pages/ausweis-gespeichert.astro | 29 -------- src/pages/kundendaten.astro | 3 +- src/pages/pdf/ansichtsausweis.astro | 2 +- src/pages/pdf/datenblatt.astro | 2 +- src/pages/verbrauchsausweis/index.astro | 12 ++-- 46 files changed, 211 insertions(+), 195 deletions(-) create mode 100644 src/lib/exclude.ts create mode 100644 src/lib/validateAccessToken.ts create mode 100644 src/modules/Ausweise/AusweisGespeichertModule.svelte create mode 100644 src/modules/EmbeddedAuthFlowModule.svelte delete mode 100644 src/modules/VerbrauchsausweisWohnenFlowModule.svelte delete mode 100644 src/pages/ausweis-gespeichert.astro diff --git a/docker-compose.yml b/docker-compose.yml index 497fc3a9..e8db76cb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,10 +7,19 @@ services: environment: PORT: 3000 NODE_ENV: "development" - network_mode: host + ports: + - "3000:3000" volumes: - ./:/online-energieausweis - ./node_modules/@ibcornelsen/ui:/online-energieausweis/node_modules/@ibcornelsen/ui - ./node_modules/@ibcornelsen/database:/online-energieausweis/node_modules/@ibcornelsen/database - ./node_modules/@ibcornelsen/api:/online-energieausweis/node_modules/@ibcornelsen/api - - ./persistent:/persistent \ No newline at end of file + - ./persistent:/persistent + ibcornelsen-api: + extends: + file: ../api/docker-compose.yml + service: ibcornelsen-api + ibcornelsen-database: + extends: + file: ../database/docker-compose.yml + service: ibcornelsen-database \ No newline at end of file diff --git a/package.json b/package.json index 0b033ff3..06c3eda9 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,6 @@ "@mollie/api-client": "^3.7.0", "@trpc/client": "^10.45.0", "@trpc/server": "^10.45.0", - "@types/body-scroll-lock": "^3.1.2", "astro": "^2.5.1", "astro-i18next": "1.0.0-beta.21", "astro-spa": "^1.3.9", @@ -59,6 +58,7 @@ "zod": "^3.22.4" }, "devDependencies": { + "@types/body-scroll-lock": "^3.1.2", "@types/js-cookie": "^3.0.6", "@types/uuid": "^9.0.1", "@typescript-eslint/eslint-plugin": "^5.59.6", diff --git a/src/components/AnsichtsausweisButton.svelte b/src/components/AnsichtsausweisButton.svelte index 3d130a0c..c2a3c57a 100644 --- a/src/components/AnsichtsausweisButton.svelte +++ b/src/components/AnsichtsausweisButton.svelte @@ -1,5 +1,5 @@ diff --git a/src/components/Ausweis/Ausweisart.svelte b/src/components/Ausweis/Ausweisart.svelte index f9a9327a..56610d11 100644 --- a/src/components/Ausweis/Ausweisart.svelte +++ b/src/components/Ausweis/Ausweisart.svelte @@ -4,13 +4,13 @@ import { addNotification, deleteNotification } from "@ibcornelsen/ui"; import TagInput from "../TagInput.svelte"; import { writable } from "svelte/store"; - import { + import type { BedarfsausweisWohnen, - Enums, GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen, - } from "@ibcornelsen/database"; + } from "@ibcornelsen/database/client"; + import { Enums } from "@ibcornelsen/database/client" export let gebaeude: GebaeudeStammdaten; export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen; diff --git a/src/components/Ausweis/BilderZusatzsysteme.svelte b/src/components/Ausweis/BilderZusatzsysteme.svelte index 662aad3d..b4de3b23 100644 --- a/src/components/Ausweis/BilderZusatzsysteme.svelte +++ b/src/components/Ausweis/BilderZusatzsysteme.svelte @@ -5,7 +5,7 @@ import DaemmungImage from "./DaemmungImage.svelte"; import FensterImage from "./FensterImage.svelte"; import Label from "../Label.svelte"; - import { BedarfsausweisWohnen, GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database"; + import type { BedarfsausweisWohnen, GebaeudeStammdaten, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client"; export let gebaeude: GebaeudeStammdaten; export let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen; diff --git a/src/components/Ausweis/DaemmungImage.svelte b/src/components/Ausweis/DaemmungImage.svelte index ae3d372d..8d8c3700 100644 --- a/src/components/Ausweis/DaemmungImage.svelte +++ b/src/components/Ausweis/DaemmungImage.svelte @@ -1,6 +1,6 @@ -
+
{ + hidden = closeable ? true : hidden; +}}> +{#if closeable} + +{/if}
\ No newline at end of file diff --git a/src/components/PaymentOption.svelte b/src/components/PaymentOption.svelte index 1a2473fe..6dc77a4e 100644 --- a/src/components/PaymentOption.svelte +++ b/src/components/PaymentOption.svelte @@ -1,5 +1,5 @@ + +{#if uid === null} +

Ausweis nicht gespeichert.

+

Ihr Ausweis wurde noch nicht gespeichert.

+{:else} +

Ausweis gespeichert.

+

Der Ausweis wurde erfolgreich gespeichert. Sie können den Ausweis nun weiter bearbeiten oder diese Seite schließen und über ihr Profil sowie folgenden Link wieder aufrufen.

+ {url} +{/if} + diff --git a/src/modules/Ausweise/VerbrauchsausweisWohnenModule.svelte b/src/modules/Ausweise/VerbrauchsausweisWohnenModule.svelte index 02753a02..f00aaa4a 100644 --- a/src/modules/Ausweise/VerbrauchsausweisWohnenModule.svelte +++ b/src/modules/Ausweise/VerbrauchsausweisWohnenModule.svelte @@ -14,49 +14,43 @@ import { AuditType, hidden } from "#components/Verbrauchsausweis/audits/hidden"; import { auditBedarfsausweisBenoetigt } from "#components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt"; import { auditVerbrauchAbweichung } from "#components/Verbrauchsausweis/audits/VerbrauchAbweichung"; - import { Enums, GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database"; + import type { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client"; + import { Enums } from "@ibcornelsen/database/client" import { client } from "src/trpc"; - import Cookies from "js-cookie"; - import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants"; import Overlay from "#components/Overlay.svelte"; + import EmbeddedAuthFlowModule from "#modules/EmbeddedAuthFlowModule.svelte"; + import AusweisGespeichertModule from "./AusweisGespeichertModule.svelte"; + import { validateAccessToken } from "#lib/validateAccessToken"; export let uid: string | null = null; export let gebaeude: GebaeudeStammdaten = {} as GebaeudeStammdaten; export let ausweis: VerbrauchsausweisWohnen = { ausweisart: Enums.Ausweisart.VerbrauchsausweisWohnen } as VerbrauchsausweisWohnen; - export let showLoginPage: boolean = false; async function spaeterWeitermachen() { // 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 (!Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)) { + if (!await validateAccessToken()) { loginOverlayHidden = false; - showLoginPage = true; - - const getEvent = (event: MessageEvent) => { - if (event.data == "AUTHORIZED") { - spaeterWeitermachen(); - window.removeEventListener("message", getEvent) - loginOverlayHidden = true; - } - } - window.addEventListener("message", getEvent) return } + loginOverlayHidden = true; + if (uid) { // Anscheinend wurde der Ausweis bereits erstellt und hat eine UID. // Jetzt müssen wir ihn nun nur noch abspeichern. try { await client.v1.verbrauchsausweisWohnen[2016].speichern.mutate({ - ...ausweis, - gebaeude_stammdaten: gebaeude, + ausweis, + gebaeude, uid }) - window.location.href = `/ausweis-gespeichert?uid=${uid}`; + speichernOverlayHidden = false; + window.history.pushState({}, "", `/verbrauchsausweis?uid=${uid}`); } catch (e) { addNotification({ dismissable: false, @@ -69,11 +63,13 @@ } else { // Wir speichern den Ausweis ab und leiten auf die "ausweis-gespeichert" Seite weiter. try { - const { uid } = await client.v1.verbrauchsausweisWohnen[2016].erstellen.mutate({ - ...ausweis, - gebaeude_stammdaten: gebaeude + const response = await client.v1.verbrauchsausweisWohnen[2016].erstellen.mutate({ + ausweis, + gebaeude }) - window.location.href = `/ausweis-gespeichert?uid=${uid}`; + uid = response.uid + window.history.pushState({}, "", `/verbrauchsausweis?uid=${uid}`); + speichernOverlayHidden = false; } catch (e) { addNotification({ dismissable: false, @@ -86,21 +82,7 @@ } } - if (uid) { - // NOTE: Funktioniert nicht mehr - async () => { - const result = await fetch(`/api/verbrauchsausweis?uid=${uid}`, { - method: "GET", - }); - - const json = await result.json(); - - if (json.success) { - gebaeude = json.data.gebaeude - ausweis = json.data.ausweis - } - }; - } + console.log(gebaeude, ausweis) function automatischAusfüllen() { gebaeude.baujahr_gebaeude = [1962]; @@ -139,13 +121,22 @@ let waitOverlayHidden = true; let loginOverlayHidden = true; + let speichernOverlayHidden = true; -
@@ -46,13 +45,13 @@ type="password" placeholder="********" name="password" - bind:value={passwort} + bind:value={data.passwort} required />
- Registrieren + Passwort Vergessen?
diff --git a/src/modules/EmbeddedRegisterModule.svelte b/src/modules/EmbeddedRegisterModule.svelte index 367e9af7..3364e67b 100644 --- a/src/modules/EmbeddedRegisterModule.svelte +++ b/src/modules/EmbeddedRegisterModule.svelte @@ -2,6 +2,8 @@ import { addNotification } from "@ibcornelsen/ui"; import { client } from "src/trpc"; + export let navigate: (target: string) => void; + export let onRegister: (response: { email: string, name: string, vorname: string }) => void; let passwort: string; let email: string; let vorname: string; @@ -16,12 +18,16 @@ name, }); - window.location.href = "/auth/embedded-login"; + onRegister({ + email, + name, + vorname + }) } catch (e) { addNotification({ message: "Ups...", subtext: - "Da ist wohl etwas schiefgelaufen... Diese Email Adresse ist bereits in Benutzung, haben sie vielleicht bereits ein Konto bei uns?", + "Da ist wohl etwas schiefgelaufen. Diese Email Adresse ist bereits in Benutzung, haben sie vielleicht bereits ein Konto bei uns?", type: "error", timeout: 0, dismissable: true, @@ -31,7 +37,7 @@
-

Registrieren:

+

Registrieren

@@ -77,7 +83,7 @@
- Einloggen + Passwort Vergessen?
diff --git a/src/modules/KundendatenModule.svelte b/src/modules/KundendatenModule.svelte index a313ca4e..c4dd03c6 100644 --- a/src/modules/KundendatenModule.svelte +++ b/src/modules/KundendatenModule.svelte @@ -4,7 +4,8 @@ import ZipSearch from "../components/ZIPSearch.svelte"; import Label from "../components/Label.svelte"; import PriceContainer from "#components/Kaufabschluss/PriceContainer.svelte"; - import { BedarfsausweisWohnen, Benutzer, Bezahlmethoden, Enums, Rechnungen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database"; + import type { BedarfsausweisWohnen, Benutzer, Bezahlmethoden, Rechnungen, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client"; + import { Enums } from "@ibcornelsen/database/client" import PaymentOption from "#components/PaymentOption.svelte"; import { client } from "src/trpc"; diff --git a/src/modules/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeModule.svelte b/src/modules/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeModule.svelte index 20caa9aa..2d2c2c76 100644 --- a/src/modules/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeModule.svelte +++ b/src/modules/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeModule.svelte @@ -10,7 +10,7 @@ import { buildingTypes } from "./BuildingTypes"; import BilderZusatzsysteme from "../../components/Ausweis/BilderZusatzsysteme.svelte"; import moment from "moment"; - import { Enums, GebaeudeStammdaten, VerbrauchsausweisGewerbe } from "@ibcornelsen/database"; + import { GebaeudeStammdaten, VerbrauchsausweisGewerbe, Enums } from "@ibcornelsen/database/client"; export let uid: string | null = null; export let gebaeude: GebaeudeStammdaten = {} as GebaeudeStammdaten; diff --git a/src/modules/VerbrauchsausweisWohnenFlowModule.svelte b/src/modules/VerbrauchsausweisWohnenFlowModule.svelte deleted file mode 100644 index 755c0de4..00000000 --- a/src/modules/VerbrauchsausweisWohnenFlowModule.svelte +++ /dev/null @@ -1,64 +0,0 @@ - - -{#if !showLoginPage} - -{/if} - -{#if showLoginPage} - { - if (uid) { - // Anscheinend wurde der Ausweis bereits erstellt und hat eine UID. - // Jetzt müssen wir ihn nun nur noch abspeichern. - try { - await client.v1.verbrauchsausweisWohnen[2016].speichern.mutate({ - ...ausweis, - gebaeude_stammdaten: gebaeude, - uid - }) - - window.location.href = `/ausweis-gespeichert?uid=${uid}`; - } catch (e) { - showLoginPage = false; - addNotification({ - dismissable: false, - message: "Ausweis konnte nicht gespeichert werden, bitte versuchen sie es erneut.", - subtext: "Sollte das Problem weiterhin bestehen, kontaktieren sie bitte den Support.", - timeout: 6000, - type: "error" - }) - } - } else { - // Wir speichern den Ausweis ab und leiten auf die "ausweis-gespeichert" Seite weiter. - try { - const { uid } = await client.v1.verbrauchsausweisWohnen[2016].erstellen.mutate({ - ...ausweis, - gebaeude_stammdaten: gebaeude - }) - window.location.href = `/ausweis-gespeichert?uid=${uid}`; - } catch (e) { - showLoginPage = false; - addNotification({ - dismissable: false, - message: "Ausweis konnte nicht gespeichert werden, bitte versuchen sie es erneut.", - subtext: "Sollte das Problem weiterhin bestehen, kontaktieren sie bitte den Support.", - timeout: 6000, - type: "error" - }) - } - } - - }}> -{/if} \ No newline at end of file diff --git a/src/pages/ausweis-gespeichert.astro b/src/pages/ausweis-gespeichert.astro deleted file mode 100644 index 68915375..00000000 --- a/src/pages/ausweis-gespeichert.astro +++ /dev/null @@ -1,29 +0,0 @@ ---- -import AusweisLayout from "#layouts/AusweisLayout.astro"; -import { prisma } from "@ibcornelsen/database"; - -const uid = Astro.url.searchParams.get("uid"); - -if (!uid) { - return Astro.redirect("/404"); -} - -const ausweis = await prisma.verbrauchsausweisWohnen.findUnique({ - where: { - uid, - }, -}); - -if (!ausweis) { - return Astro.redirect("/404"); -} - -const url = `https://ibcornelsen.de/verbrauchsausweis?uid=${uid}` ---- - - -

Ausweis Gespeichert

-

- Der Ausweis wurde erfolgreich gespeichert. Sie können ihn nun unter {url} fortsetzen. -

-
\ No newline at end of file diff --git a/src/pages/kundendaten.astro b/src/pages/kundendaten.astro index 1bd37e78..3b356d4f 100644 --- a/src/pages/kundendaten.astro +++ b/src/pages/kundendaten.astro @@ -2,7 +2,8 @@ import KundendatenModule from "#modules/KundendatenModule.svelte"; import AusweisLayout from "#layouts/AusweisLayout.astro"; -import { Benutzer, Enums, prisma } from "@ibcornelsen/database"; +import { Benutzer, Enums } from "@ibcornelsen/database/client"; +import { prisma } from "@ibcornelsen/database/server"; // Man sollte nur auf diese Seite kommen, wenn ein Ausweis bereits vorliegt und in der Datenbank abgespeichert wurde. const uidAusweis = Astro.url.searchParams.get("uid"); diff --git a/src/pages/pdf/ansichtsausweis.astro b/src/pages/pdf/ansichtsausweis.astro index f1b7b1d1..577c1e6b 100644 --- a/src/pages/pdf/ansichtsausweis.astro +++ b/src/pages/pdf/ansichtsausweis.astro @@ -5,7 +5,7 @@ import Checkbox from "#components/Checkbox.svelte"; import PDFHeader from "#components/PDF/PDFHeader.svelte"; import PDFSectionHeader from "#components/PDF/PDFSectionHeader.svelte"; import PDFLayout from "#layouts/PDFLayout.astro"; -import { VerbrauchsausweisWohnen, GebaeudeStammdaten, prisma } from "@ibcornelsen/database"; +import { VerbrauchsausweisWohnen, GebaeudeStammdaten, prisma } from "@ibcornelsen/database/client"; diff --git a/src/pages/pdf/datenblatt.astro b/src/pages/pdf/datenblatt.astro index 6f2fff3f..650b4980 100644 --- a/src/pages/pdf/datenblatt.astro +++ b/src/pages/pdf/datenblatt.astro @@ -4,7 +4,7 @@ import Checkbox from "#components/Checkbox.svelte"; import DatenblattFooter from "#components/DatenblattFooter.svelte"; import DatenblattHeader from "#components/DatenblattHeader.svelte"; import PDFLayout from "#layouts/PDFLayout.astro"; -import { GebaeudeStammdaten, VerbrauchsausweisWohnen, prisma } from "@ibcornelsen/database"; +import { GebaeudeStammdaten, VerbrauchsausweisWohnen, prisma } from "@ibcornelsen/database/client"; const base64 = Astro.url.searchParams.get("base64"); let ausweis: (Partial & { gebaeude_stammdaten: Partial }) | null = null; diff --git a/src/pages/verbrauchsausweis/index.astro b/src/pages/verbrauchsausweis/index.astro index 2fd906a1..056c78f5 100644 --- a/src/pages/verbrauchsausweis/index.astro +++ b/src/pages/verbrauchsausweis/index.astro @@ -2,7 +2,8 @@ import AusweisLayout from "#layouts/AusweisLayout.astro"; import VerbrauchsausweisWohnenModule from "#modules/Ausweise/VerbrauchsausweisWohnenModule.svelte"; -import { GebaeudeStammdaten, VerbrauchsausweisWohnen, prisma } from "@ibcornelsen/database"; +import { GebaeudeStammdaten, VerbrauchsausweisWohnen, prisma } from "@ibcornelsen/database/server"; +import { exclude } from "#lib/exclude"; @@ -13,12 +14,15 @@ let gebaeude: GebaeudeStammdaten = {} as GebaeudeStammdaten; if (uid) { const request = await prisma.verbrauchsausweisWohnen.findUnique({ where: { uid }, - include: { gebaeude_stammdaten: true }, + include: { + gebaeude_stammdaten: true + } }) if (request) { - ausweis = request; - gebaeude = request.gebaeude_stammdaten; + const { gebaeude_stammdaten, ...rest } = request; + ausweis = exclude(rest, ["id", "uid", "gebaeude_stammdaten_id", "ausweisart", "benutzer_id", "rechnungen_id"]) as VerbrauchsausweisWohnen; + gebaeude = exclude(request.gebaeude_stammdaten, ["id", "uid", "benutzer_id"]) as GebaeudeStammdaten; } }