From 9619bf29f33de9303a56df496e9416d63af8d3cf Mon Sep 17 00:00:00 2001
From: Moritz Utcke <62291876+Letsmoe@users.noreply.github.com>
Date: Sat, 6 May 2023 23:02:54 +0400
Subject: [PATCH] API Optimierungen
---
package.json | 5 +-
src/components/AusweisCard.svelte | 301 +++++++++++++++++++++-
src/components/Icons/Cross.svelte | 23 ++
src/components/Icons/Home.svelte | 2 +
src/components/Katex.svelte | 19 ++
src/lib/Ausweis/Verbrauchsausweis.ts | 48 +++-
src/lib/Ausweis/index.ts | 2 +-
src/lib/Klimafaktoren.ts | 2 +-
src/lib/{Memization.ts => Memoization.ts} | 0
src/lib/User/index.ts | 2 +-
src/lib/server/Heizwertfaktor.ts | 5 +
src/lib/server/Klimafaktoren.ts | 3 +
src/pages/api/user.ts | 2 +-
src/pages/user/index.astro | 13 +-
14 files changed, 396 insertions(+), 31 deletions(-)
create mode 100644 src/components/Icons/Cross.svelte
create mode 100644 src/components/Katex.svelte
rename src/lib/{Memization.ts => Memoization.ts} (100%)
create mode 100644 src/lib/server/Heizwertfaktor.ts
create mode 100644 src/lib/server/Klimafaktoren.ts
diff --git a/package.json b/package.json
index 1a0aeb5a..4e457027 100644
--- a/package.json
+++ b/package.json
@@ -23,14 +23,15 @@
"cookiejs": "^2.1.2",
"express": "^4.18.2",
"jwt-simple": "^0.5.6",
+ "katex": "^0.16.7",
"knex": "^2.4.2",
"moment": "^2.29.4",
"pg": "^8.10.0",
"svelte": "^3.54.0",
+ "svelte-preprocess": "^5.0.1",
"tailwindcss": "^3.0.24",
"uuid": "^9.0.0",
- "zod": "^3.21.4",
- "svelte-preprocess": "^5.0.1"
+ "zod": "^3.21.4"
},
"devDependencies": {
"@types/uuid": "^9.0.1",
diff --git a/src/components/AusweisCard.svelte b/src/components/AusweisCard.svelte
index 5d6a7b9d..517c5c03 100644
--- a/src/components/AusweisCard.svelte
+++ b/src/components/AusweisCard.svelte
@@ -1,18 +1,297 @@
-
-
-
{strasse}, {plz} {stadt}
-
diff --git a/src/components/Icons/Cross.svelte b/src/components/Icons/Cross.svelte
new file mode 100644
index 00000000..000038fd
--- /dev/null
+++ b/src/components/Icons/Cross.svelte
@@ -0,0 +1,23 @@
+
+
+
diff --git a/src/components/Icons/Home.svelte b/src/components/Icons/Home.svelte
index 3f0daba9..93025171 100644
--- a/src/components/Icons/Home.svelte
+++ b/src/components/Icons/Home.svelte
@@ -11,6 +11,8 @@
viewBox="0 0 15 15"
fill="none"
xmlns="http://www.w3.org/2000/svg"
+ on:click
+ {...$$restProps}
>
+ import katex from "katex";
+ export let math: string;
+ export let displayMode: boolean = false;
+
+ const options = {
+ displayMode: displayMode,
+ throwOnError: false
+ }
+
+ let katexString: any;
+ $: katexString = katex.renderToString(math, options)
+
+
+
+
+
+
+{@html katexString}
\ No newline at end of file
diff --git a/src/lib/Ausweis/Verbrauchsausweis.ts b/src/lib/Ausweis/Verbrauchsausweis.ts
index c3e85545..46f11d0c 100644
--- a/src/lib/Ausweis/Verbrauchsausweis.ts
+++ b/src/lib/Ausweis/Verbrauchsausweis.ts
@@ -1,4 +1,5 @@
import { getKlimafaktorenClient } from "../Klimafaktoren";
+import { getHeizwertfaktorClient } from "../server/Heizwertfaktor";
export enum AusweisType {
VERBRAUCHSAUSWEIS,
@@ -16,6 +17,40 @@ export enum Lueftungskonzept {
export type Ausweisart = "VA" | "BA" | "VANW";
export type Ausstellgrund = "Vermietung" | "Neubau" | "Verkauf" | "Modernisierung" | "Sonstiges";
+class BitChecker {
+ public value: number;
+
+ constructor(number: number) {
+ this.value = number;
+ }
+
+ public isSet(bitIndex: number): boolean {
+ const bitMask = 1 << bitIndex;
+ return (this.value & bitMask) !== 0;
+ }
+
+ public set(index: number): number {
+ if (!this.isSet(index)) {
+ this.value += 2 ** index;
+ }
+
+ return this.value;
+ }
+
+ public off(index: number) {
+ if (this.isSet(index)) {
+ this.value -= 2 ** index;
+ }
+
+ return this.value;
+ }
+
+ public valueOf(): number {
+ return this.value;
+ }
+}
+
+
export class Verbrauchsausweis {
public ausweisart: Ausweisart = "VA";
public id: number = 0;
@@ -35,8 +70,7 @@ export class Verbrauchsausweis {
public erstellungsdatum: Date = new Date();
public ausstellgrund: Ausstellgrund = "Vermietung";
- public energieverbrauch_zeitraum_monat: number = 0;
- public energieverbrauch_zeitraum_jahr: number = 0;
+ public energieverbrauch_zeitraum: Date = new Date();
public energieverbrauch_1_heizquelle_1: number = 0;
public energieverbrauch_2_heizquelle_1: number = 0;
public energieverbrauch_3_heizquelle_1: number = 0;
@@ -52,7 +86,7 @@ export class Verbrauchsausweis {
public anteil_warmwasser_1: number = 0;
public anteil_warmwasser_2: number = 0;
- public public_id: string = "";
+ public uid: string = "";
public wohnflaeche: number = 0;
public keller_beheizt: boolean = false;
@@ -66,7 +100,7 @@ export class Verbrauchsausweis {
public versorgungssysteme: number = 0;
public fenster_dach: number = 0;
- public energiequelle_2_nutzung: number = 0;
+ public energiequelle_2_nutzung: BitChecker = new BitChecker(0);
public daemmung: number = 0;
public energetische_nutzfläche: number = 0;
@@ -160,7 +194,7 @@ export class Verbrauchsausweis {
];
if (this.energietraeger_1 && this.energietraeger_einheit_heizquelle_1) {
[umrechnungsfaktor, primaerfaktor, heizwertfaktor, coe] =
- getHeizwertfaktor(
+ await getHeizwertfaktorClient(
this.energietraeger_1,
this.energietraeger_einheit_heizquelle_1
);
@@ -168,7 +202,7 @@ export class Verbrauchsausweis {
if (this.energietraeger_2 && this.energietraeger_einheit_heizquelle_2) {
[umrechnungsfaktor_1, primaerfaktor_1, heizwertfaktor_1, coe_1] =
- getHeizwertfaktor(
+ await getHeizwertfaktorClient(
this.energietraeger_2,
this.energietraeger_einheit_heizquelle_2
);
@@ -215,7 +249,7 @@ export class Verbrauchsausweis {
durchschnittsKlimafaktor;
}
- if (energiequelle_2_nutzung[3]) {
+ if (this.energiequelle_2_nutzung.isSet(3)) {
kuehlungsZuschlag = 6 * this.energetische_nutzfläche * 3;
}
diff --git a/src/lib/Ausweis/index.ts b/src/lib/Ausweis/index.ts
index dfd9f2c4..30cf25d7 100644
--- a/src/lib/Ausweis/index.ts
+++ b/src/lib/Ausweis/index.ts
@@ -1,5 +1,5 @@
export class Ausweis {
- public static fromPublicId(public_id: string) {
+ public static fromUID(uid: string) {
}
diff --git a/src/lib/Klimafaktoren.ts b/src/lib/Klimafaktoren.ts
index 8ab7eeb0..603556f1 100644
--- a/src/lib/Klimafaktoren.ts
+++ b/src/lib/Klimafaktoren.ts
@@ -1,5 +1,5 @@
import moment from "moment";
-import { memoize } from "./Memization";
+import { memoize } from "./Memoization";
export const getKlimafaktorenClient = memoize>(async (date: Date, zip: string) => {
const response = await fetch(`/api/klimafaktoren?date=${moment(date).format("YYYY-MM-DD")}&zip=${zip}`);
diff --git a/src/lib/Memization.ts b/src/lib/Memoization.ts
similarity index 100%
rename from src/lib/Memization.ts
rename to src/lib/Memoization.ts
diff --git a/src/lib/User/index.ts b/src/lib/User/index.ts
index fae65aaa..9ca54bba 100644
--- a/src/lib/User/index.ts
+++ b/src/lib/User/index.ts
@@ -10,7 +10,7 @@ export class User {
* @param uid Die unique/public id des gesuchten Benutzers.
* @returns {UserType | null} Die Daten des Nutzers oder null falls dieser nicht gefunden werden kann.
*/
- public static async fromPublicId(uid: string): Promise {
+ public static async fromUID(uid: string): Promise {
if (!uid || typeof uid !== "string") {
return null;
}
diff --git a/src/lib/server/Heizwertfaktor.ts b/src/lib/server/Heizwertfaktor.ts
new file mode 100644
index 00000000..4e2656bc
--- /dev/null
+++ b/src/lib/server/Heizwertfaktor.ts
@@ -0,0 +1,5 @@
+import { memoize } from "../Memoization";
+
+export const getHeizwertfaktorClient = memoize>(async function() {
+ return [1,1,1,1];
+})
\ No newline at end of file
diff --git a/src/lib/server/Klimafaktoren.ts b/src/lib/server/Klimafaktoren.ts
new file mode 100644
index 00000000..37e8b10b
--- /dev/null
+++ b/src/lib/server/Klimafaktoren.ts
@@ -0,0 +1,3 @@
+export async function getKlimafaktorenServer(date: Date, zip: string) {
+
+};
\ No newline at end of file
diff --git a/src/pages/api/user.ts b/src/pages/api/user.ts
index fc4d0398..a29b8e1a 100644
--- a/src/pages/api/user.ts
+++ b/src/pages/api/user.ts
@@ -14,7 +14,7 @@ export const get: APIRoute = async ({ request }) => {
return MissingPropertyError(["uid"]);
}
- const user = User.fromPublicId(body.uid);
+ const user = User.fromUID(body.uid);
if (!user) {
return MissingEntityError("user");
diff --git a/src/pages/user/index.astro b/src/pages/user/index.astro
index 848d5df9..e707db75 100644
--- a/src/pages/user/index.astro
+++ b/src/pages/user/index.astro
@@ -4,6 +4,7 @@ import { decodeToken } from "../../lib/JsonWebToken";
import { User } from "../../lib/User";
import UserLayout from "~/layouts/UserLayout.astro";
import AusweisCard from "~/components/AusweisCard.svelte";
+import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
const token = Astro.cookies.get("token").value;
const expires = Astro.cookies.get("expires").number();
@@ -16,7 +17,7 @@ if (!token || now > expires) {
}
const parsed = decodeToken(token);
-const user = await User.fromPublicId(parsed.uid);
+const user = await User.fromUID(parsed.uid);
if (!user) {
Astro.cookies.delete("token");
@@ -30,11 +31,9 @@ if (!user) {
Willkommen zurück {user.email}
Ihre Ausweise
-
-
-
-
-
-
+
\ No newline at end of file