From ec7a9ad88ce43e612c4ea3528432e11b09468737 Mon Sep 17 00:00:00 2001
From: Moritz Utcke <62291876+Letsmoe@users.noreply.github.com>
Date: Wed, 20 Sep 2023 13:22:17 +0600
Subject: [PATCH] =?UTF-8?q?=C3=9Cberarbeitung=20Verbrauchsausweis+=20Berec?=
=?UTF-8?q?hnung?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 67 ++++-------
package.json | 112 +++++++++---------
.../Ausweis/PerformanceScore.svelte | 4 +-
src/lib/Ausweis/Ausweis.ts | 5 -
src/lib/Ausweis/Bedarfsausweis.ts | 8 +-
src/lib/Ausweis/Verbrauchsausweis.ts | 90 ++++++++------
src/lib/Ausweis/VerbrauchsausweisGewerbe.ts | 6 +-
src/lib/Energiekennwerte.ts | 25 ----
src/lib/Klimafaktoren.ts | 7 +-
src/lib/client/fetch.ts | 9 ++
src/lib/server/Klimafaktoren.ts | 4 +-
src/lib/server/fetch.ts | 21 ++++
src/pages/api/klimafaktor/index.ts | 22 ++--
.../end-energie-verbrauch.test.ts | 18 +++
vitest.config.ts | 8 --
15 files changed, 204 insertions(+), 202 deletions(-)
delete mode 100644 src/lib/Energiekennwerte.ts
create mode 100644 src/lib/client/fetch.ts
create mode 100644 src/lib/server/fetch.ts
create mode 100644 tests/verbrauchsausweis/end-energie-verbrauch.test.ts
delete mode 100644 vitest.config.ts
diff --git a/README.md b/README.md
index a98118f2..8e13104b 100644
--- a/README.md
+++ b/README.md
@@ -1,17 +1,10 @@
-[![Contributors][contributors-shield]][contributors-url]
-[![Forks][forks-shield]][forks-url]
-[![Stargazers][stars-shield]][stars-url]
-[![Issues][issues-shield]][issues-url]
-[![MIT License][license-shield]][license-url]
-
-
@@ -38,13 +31,9 @@
## Beschreibung
-Dies ist das Repository für die Datenbank des IBCornelsen. Eine Demo kann direkt über GitHub heruntergeladen und mit **Docker** gestartet werden.
+Dies ist das Repository für das Online-Energieausweis Projekt des IBCornelsen. Eine Demo kann direkt über GitHub heruntergeladen und mit **Docker** gestartet werden.
-Momentan arbeiten wir an der Umsetzung einer neuen, verbesserten Datenbankstruktur die aktuelle Probleme mit Hinsicht auf die Skalierung unserer Architektur lösen wird.
-
-Hier eine Veranschaulichung:
-
-
+Momentan arbeiten wir an der generellen Struktur, um eine problemlose Skalierung unserer Services gewährleisten zu können.
### Anforderungen
@@ -54,32 +43,33 @@ Für dieses Projekt benötigst du:
* docker
* Installationsanleitungen für **docker** kannst du [hier](https://docs.docker.com/engine/install/) finden.
-* NodeJS
- * Downloads für Node stehen [hier](https://nodejs.org/en) zur Verfügung.
-* Einen Package Manger deiner Wahl, du kannst **NPM**, **pNPM** oder auch **Yarn** verwenden. Wir empfehlen **pNPM** da er in den meisten Situationen schneller ist und dabei das gleiche Feature Set wie **NPM** bietet.
+* Einen Package Manger deiner Wahl, du kannst **NPM**, **pNPM** oder auch **Yarn** verwenden. Wir empfehlen allerdings **bun** aufgrund der verbesserten Geschwindigkeit und dem gelieferten Feature Set, da **bun** sowohl einen Package Manager als auch einen Task Runner beinhaltet.
+ * Installationsanleitungen für **bun** kannst du [hier](https://bun.sh/) finden.
### Installation
1. Klone das Repository
- ```sh
- git clone https://github.com/IBCornelsen/database.git
- ```
+ ```sh
+ git clone https://github.com/IBCornelsen/online-energieausweis
+ ```
2. Führe `docker-compose` aus.
- ```bash
- docker-compose up --build
- ```
+ ```bash
+ docker-compose up --build
+ ```
+
+3. Öffne `localhost:3000` in deinem Browser.
## Nächste Schritte
-* [ ] Verteilte Datenbankstruktur
+* [ ] Funktionierender Checkout Flow
* [ ] Performance Optimierungen
-* [ ] Umstieg auf PostgreSQL
- * [ ] Umzug der alten Daten
+* [ ] Automatische Tests
+* [ ] Dokumentation
-See the [open issues](https://github.com/IBCornelsen/database/issues) for a full list of proposed features (and known issues).
+Siehe alle [offenen issues](https://github.com/IBCornelsen/online-energieausweis/issues) für eine Liste der vorgeschlagenen Features (und bekannten Probleme).
## Beiträge zu unserer Arbeit
@@ -99,15 +89,4 @@ Veröffentlicht unter der GPL-3.0 Lizenz. Siehe `LICENSE` für mehr Information.
IBCornelsen - [info@ibcornelsen.de](mailto://info@ibcornelsen.de)
-Organisation: [https://github.com/IBCornelsen/database](https://github.com/IBCornelsen/database)
-
-[contributors-shield]: https://img.shields.io/github/contributors/IBCornelsen/database.svg?style=for-the-badge
-[contributors-url]: https://github.com/IBCornelsen/database/graphs/contributors
-[forks-shield]: https://img.shields.io/github/forks/IBCornelsen/database.svg?style=for-the-badge
-[forks-url]: https://github.com/IBCornelsen/database/network/members
-[stars-shield]: https://img.shields.io/github/stars/IBCornelsen/database.svg?style=for-the-badge
-[stars-url]: https://github.com/IBCornelsen/database/stargazers
-[issues-shield]: https://img.shields.io/github/issues/IBCornelsen/database.svg?style=for-the-badge
-[issues-url]: https://github.com/IBCornelsen/database/issues
-[license-shield]: https://img.shields.io/github/license/IBCornelsen/database.svg?style=for-the-badge
-[license-url]: https://github.com/IBCornelsen/database/blob/master/LICENSE
+Organisation: [https://github.com/IBCornelsen](https://github.com/IBCornelsen)
\ No newline at end of file
diff --git a/package.json b/package.json
index ed66e0cc..c79cb1fd 100644
--- a/package.json
+++ b/package.json
@@ -1,58 +1,58 @@
{
- "name": "online-energieausweis",
- "version": "0.0.1",
- "license": "GPL V3.0",
- "type": "module",
- "scripts": {
- "dev": "bun --bun astro dev",
- "build": "bun --bun astro build",
- "preview": "bun --bun astro preview",
- "astro": "astro",
- "test:e2e": "cypress run",
- "test:unit": "vitest",
- "format": "prettier --write .",
- "build:production": "astro build && bun --bun server.js",
- "i18n:generate": "bunx astro-i18next generate"
- },
- "private": true,
- "dependencies": {
- "@astrojs/mdx": "^0.18.4",
- "@astrojs/node": "^5.1.4",
- "@astrojs/svelte": "^2.2.0",
- "@astrojs/tailwind": "^3.1.3",
- "@ibcornelsen/ui": "^0.0.2",
- "@mollie/api-client": "^3.7.0",
- "astro": "^2.5.1",
- "astro-i18next": "1.0.0-beta.21",
- "cookiejs": "^2.1.2",
- "esbuild": "^0.18.17",
- "express": "^4.18.2",
- "flag-icons": "^6.9.2",
- "i18next": "^23.4.1",
- "i18next-fs-backend": "^2.1.5",
- "i18next-http-backend": "^2.2.1",
- "jimp": "^0.22.8",
- "jwt-simple": "^0.5.6",
- "katex": "^0.16.7",
- "knex": "^2.4.2",
- "moment": "^2.29.4",
- "pg": "^8.11.0",
- "sass": "^1.62.1",
- "svelte": "^3.59.1",
- "svelte-preprocess": "^5.0.3",
- "tailwindcss": "^3.3.2",
- "uuid": "^9.0.0",
- "vite-tsconfig-paths": "^4.2.0",
- "zod": "^3.21.4"
- },
- "devDependencies": {
- "@types/uuid": "^9.0.1",
- "@typescript-eslint/eslint-plugin": "^5.59.6",
- "@typescript-eslint/parser": "^5.59.6",
- "eslint": "~8.15.0",
- "eslint-config-prettier": "8.1.0",
- "prettier": "^2.8.8",
- "typescript": "^4.9.5",
- "vitest": "^0.29.8"
- }
+ "name": "online-energieausweis",
+ "version": "0.0.1",
+ "license": "GPL V3.0",
+ "type": "module",
+ "scripts": {
+ "dev": "bun --bun astro dev",
+ "build": "bun --bun astro build",
+ "preview": "bun --bun astro preview",
+ "astro": "astro",
+ "test:e2e": "cypress run",
+ "test:unit": "bun test",
+ "format": "prettier --write .",
+ "build:production": "astro build && bun --bun server.js",
+ "i18n:generate": "bunx astro-i18next generate"
+ },
+ "private": true,
+ "dependencies": {
+ "@astrojs/mdx": "^0.18.4",
+ "@astrojs/node": "^5.1.4",
+ "@astrojs/svelte": "^2.2.0",
+ "@astrojs/tailwind": "^3.1.3",
+ "@ibcornelsen/ui": "^0.0.2",
+ "@mollie/api-client": "^3.7.0",
+ "astro": "^2.5.1",
+ "astro-i18next": "1.0.0-beta.21",
+ "bun": "^1.0.2",
+ "cookiejs": "^2.1.2",
+ "esbuild": "^0.18.17",
+ "express": "^4.18.2",
+ "flag-icons": "^6.9.2",
+ "i18next": "^23.4.1",
+ "i18next-fs-backend": "^2.1.5",
+ "i18next-http-backend": "^2.2.1",
+ "jimp": "^0.22.8",
+ "jwt-simple": "^0.5.6",
+ "katex": "^0.16.7",
+ "knex": "^2.4.2",
+ "moment": "^2.29.4",
+ "pg": "^8.11.0",
+ "sass": "^1.62.1",
+ "svelte": "^3.59.1",
+ "svelte-preprocess": "^5.0.3",
+ "tailwindcss": "^3.3.2",
+ "uuid": "^9.0.0",
+ "vite-tsconfig-paths": "^4.2.0",
+ "zod": "^3.21.4"
+ },
+ "devDependencies": {
+ "@types/uuid": "^9.0.1",
+ "@typescript-eslint/eslint-plugin": "^5.59.6",
+ "@typescript-eslint/parser": "^5.59.6",
+ "eslint": "~8.15.0",
+ "eslint-config-prettier": "8.1.0",
+ "prettier": "^2.8.8",
+ "typescript": "^4.9.5"
+ }
}
diff --git a/src/components/Ausweis/PerformanceScore.svelte b/src/components/Ausweis/PerformanceScore.svelte
index d6387e0f..5848f44c 100644
--- a/src/components/Ausweis/PerformanceScore.svelte
+++ b/src/components/Ausweis/PerformanceScore.svelte
@@ -40,8 +40,8 @@
let translation_2 = 0;
$: {
(async () => {
- const endEnergieVerbrauch = (await ausweis.end_energie_verbrauch);
- const primaerEnergieVerbrauch = (await ausweis.primaer_energie_verbrauch);
+ const endEnergieVerbrauch = (await ausweis.endEnergieVerbrauch);
+ const primaerEnergieVerbrauch = (await ausweis.primaerEnergieVerbrauch);
translation_1 = Math.max(0, Math.min(100, endEnergieVerbrauch / maxPerformance * 100))
translation_2 = Math.max(0, Math.min(100, primaerEnergieVerbrauch / maxPerformance * 100))
})()
diff --git a/src/lib/Ausweis/Ausweis.ts b/src/lib/Ausweis/Ausweis.ts
index e24d78e5..fb0648d8 100644
--- a/src/lib/Ausweis/Ausweis.ts
+++ b/src/lib/Ausweis/Ausweis.ts
@@ -32,11 +32,6 @@ export function getAusweis(ausweisart: Ausweisart, initializer?: Ausweis): Auswe
} else {
throw new Error("Unbekannte Ausweisart.");
}
-
- if (initializer) {
- ausweis.ausstellgrund = initializer.ausstellgrund;
- ausweis.ausweisart = initializer.ausweisart;
- }
return ausweis;
}
\ No newline at end of file
diff --git a/src/lib/Ausweis/Bedarfsausweis.ts b/src/lib/Ausweis/Bedarfsausweis.ts
index 54deaa8b..0a4259ee 100644
--- a/src/lib/Ausweis/Bedarfsausweis.ts
+++ b/src/lib/Ausweis/Bedarfsausweis.ts
@@ -4,8 +4,6 @@ import moment from "moment";
import { BitChecker } from "../BitChecker";
import { getHeizungswerte } from "../Heizungswerte";
import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types";
-import { Ausweis } from "./Ausweis";
-import { Energiekennwerte } from "../Energiekennwerte";
export class Bedarfsausweis {
public ausweisart: Ausweisart = "VA";
@@ -154,8 +152,8 @@ export class Bedarfsausweis {
}
}
- public get primaer_energie_verbrauch(): number {
- const Endenergieverbrauch = this.end_energie_verbrauch;
+ public get primaerEnergieBedarf(): number {
+ const Endenergieverbrauch = this.endEnergieVerbrauch;
const brennstoff_1 = getHeizwertfaktorClient(
this.energietraeger_1,
@@ -165,7 +163,7 @@ export class Bedarfsausweis {
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
}
- public get end_energie_verbrauch(): number {
+ public get endEnergieVerbrauch(): number {
let dach_u_wert = 1 / (1 / this.dach_daemmung / 0.04);
let aussenwand_u_wert = 1 / (1 / this.aussenwand_daemmung / 0.04);
let fussboden_u_wert = 1 / (1 / this.boden_daemmung / 0.04);
diff --git a/src/lib/Ausweis/Verbrauchsausweis.ts b/src/lib/Ausweis/Verbrauchsausweis.ts
index e3808814..24305481 100644
--- a/src/lib/Ausweis/Verbrauchsausweis.ts
+++ b/src/lib/Ausweis/Verbrauchsausweis.ts
@@ -1,34 +1,46 @@
import { getKlimafaktorenClient } from "../Klimafaktoren";
import { getHeizwertfaktorClient } from "../server/Heizwertfaktor";
import { Ausstellgrund, Ausweisart } from "./types";
-import { Energiekennwerte } from "../Energiekennwerte";
import { Gebaeude } from "../Gebaeude";
+import { User } from "#lib/User";
export class Verbrauchsausweis {
- public ausweisart: Ausweisart = "VA";
- public ausstellgrund: Ausstellgrund = "Vermietung";
- public warmwasser_enthalten: boolean = true;
public id?: number;
public uid?: string;
- public baujahr_anlage: number[] = [];
+ public gebaeude_stammdaten: Gebaeude = new Gebaeude();
+ public benutzer?: User;
+ public rechnung?: any;
+ public erstellungsdatum: Date = new Date();
+ public ausstellgrund: Ausstellgrund = "Sonstiges";
+ public registriernummer: string = "";
+ public erledigt: boolean = false;
+ public baujahr_heizung: number[] = [];
+ public zusaetzliche_heizquelle: boolean = false;
+ public brennstoff_1: string = "Erdgas";
+ public einheit_1: string = "kWh";
+ public brennstoff_2: string = "Erdgas";
+ public einheit_2: string = "kWh";
+ public startdatum: Date = new Date();
+ public enddatum: Date = new Date();
+ public verbrauch_1: number = 0;
+ public verbrauch_2: number = 0;
+ public verbrauch_3: number = 0;
+ public verbrauch_4: number = 0;
+ public verbrauch_5: number = 0;
+ public verbrauch_6: number = 0;
+ public warmwasser_enthalten: boolean = false;
+ public anteil_warmwasser_1: number = 0;
+ public anteil_warmwasser_2: number = 0;
public get energetische_nutzfläche(): number {
return (
- this.gebaeude.wohnflaeche *
- (this.gebaeude.keller_beheizt ? 1.35 : 1.2)
+ this.gebaeude_stammdaten.wohnflaeche *
+ (this.gebaeude_stammdaten.keller_beheizt ? 1.35 : 1.2)
);
}
- public regnummer?: string;
-
- public kennwerte: Energiekennwerte = new Energiekennwerte();
- public gebaeude: Gebaeude = new Gebaeude();
-
public constructor(initializer?: Verbrauchsausweis) {
- if (initializer) {
- this.ausweisart = initializer.ausweisart;
- this.kennwerte = initializer.kennwerte;
- }
+
}
public static fromBase64(base64: string): Verbrauchsausweis | null {
@@ -42,59 +54,59 @@ export class Verbrauchsausweis {
}
}
- public get primaer_energie_verbrauch(): Promise {
+ public get primaerEnergieBedarf(): Promise {
return (async () => {
- const Endenergieverbrauch = await this.end_energie_verbrauch;
+ const Endenergieverbrauch = await this.endEnergieVerbrauch;
const brennstoff_1 = getHeizwertfaktorClient(
- this.kennwerte.energietraeger_1,
- this.kennwerte.einheit_1
+ this.brennstoff_1,
+ this.einheit_1
);
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
})();
}
- public get end_energie_verbrauch(): Promise {
+ public get endEnergieVerbrauch(): Promise {
return (async () => {
- const date = this.kennwerte.zeitraum;
+ const date = this.startdatum;
const klimafaktoren = await getKlimafaktorenClient(
date,
- this.gebaeude.plz
+ this.gebaeude_stammdaten.plz
);
// Endenergieverbrauch
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
let brennstoff_1 = getHeizwertfaktorClient(
- this.kennwerte.energietraeger_1,
- this.kennwerte.einheit_1
+ this.brennstoff_1,
+ this.einheit_1
);
let brennstoff_2 = getHeizwertfaktorClient(
- this.kennwerte.energietraeger_2,
- this.kennwerte.einheit_2
+ this.brennstoff_2,
+ this.einheit_2
);
let verbrauch_1_kwh =
- this.kennwerte.verbrauch_1 * brennstoff_1.umrechnungsfaktor;
+ this.verbrauch_1 * brennstoff_1.umrechnungsfaktor;
let verbrauch_2_kwh =
- this.kennwerte.verbrauch_2 * brennstoff_1.umrechnungsfaktor;
+ this.verbrauch_2 * brennstoff_1.umrechnungsfaktor;
let verbrauch_3_kwh =
- this.kennwerte.verbrauch_3 * brennstoff_1.umrechnungsfaktor;
+ this.verbrauch_3 * brennstoff_1.umrechnungsfaktor;
let verbrauch_4_kwh =
- this.kennwerte.verbrauch_4 * brennstoff_2.umrechnungsfaktor;
+ this.verbrauch_4 * brennstoff_2.umrechnungsfaktor;
let verbrauch_5_kwh =
- this.kennwerte.verbrauch_5 * brennstoff_2.umrechnungsfaktor;
+ this.verbrauch_5 * brennstoff_2.umrechnungsfaktor;
let verbrauch_6_kwh =
- this.kennwerte.verbrauch_6 * brennstoff_2.umrechnungsfaktor;
+ this.verbrauch_6 * brennstoff_2.umrechnungsfaktor;
let warmwasserZuschlag = 0;
let leerstandsZuschlag = 0;
let kuehlungsZuschlag = 0;
- if (this.kennwerte.anteil_warmwasser_1 == 0) {
+ if (this.anteil_warmwasser_1 == 0) {
warmwasserZuschlag = 20 * this.energetische_nutzfläche * 3;
}
- if (this.gebaeude.leerstand > 0) {
+ if (this.gebaeude_stammdaten.leerstand > 0) {
let durchschnittsKlimafaktor =
klimafaktoren.reduce((a, b) => a + b, 0) / 3;
@@ -105,16 +117,16 @@ export class Verbrauchsausweis {
verbrauch_4_kwh +
verbrauch_5_kwh +
verbrauch_6_kwh) *
- (this.gebaeude.leerstand / 100)) /
+ (this.gebaeude_stammdaten.leerstand / 100)) /
durchschnittsKlimafaktor;
}
- if (this.gebaeude.energiequelle_2_nutzung[3]) {
+ if (this.gebaeude_stammdaten.energiequelle_2_nutzung[3]) {
kuehlungsZuschlag = 6 * this.energetische_nutzfläche * 3;
}
- let anteil_heizung = 1 - this.kennwerte.anteil_warmwasser_1 / 100;
- let anteil_warmwasser = this.kennwerte.anteil_warmwasser_1 / 100;
+ let anteil_heizung = 1 - this.anteil_warmwasser_1 / 100;
+ let anteil_warmwasser = this.anteil_warmwasser_1 / 100;
let Energieverbrauchskennwert =
(anteil_heizung *
diff --git a/src/lib/Ausweis/VerbrauchsausweisGewerbe.ts b/src/lib/Ausweis/VerbrauchsausweisGewerbe.ts
index 29a19c8f..c012347a 100644
--- a/src/lib/Ausweis/VerbrauchsausweisGewerbe.ts
+++ b/src/lib/Ausweis/VerbrauchsausweisGewerbe.ts
@@ -148,9 +148,9 @@ export class VerbrauchsausweisGewerbe {
}
}
- public get primaer_energie_verbrauch(): Promise {
+ public get primaerEnergieBedarf(): Promise {
return (async () => {
- const Endenergieverbrauch = await this.end_energie_verbrauch;
+ const Endenergieverbrauch = await this.endEnergieVerbrauch;
const brennstoff_1 = getHeizwertfaktorClient(this.energietraeger_1, this.energietraeger_einheit_heizquelle_1);
@@ -158,7 +158,7 @@ export class VerbrauchsausweisGewerbe {
})();
}
- public get end_energie_verbrauch(): Promise {
+ public get endEnergieVerbrauch(): Promise {
return (async () => {
const date = this.energieverbrauch_zeitraum;
const klimafaktoren = await getKlimafaktorenClient(
diff --git a/src/lib/Energiekennwerte.ts b/src/lib/Energiekennwerte.ts
deleted file mode 100644
index 34410d57..00000000
--- a/src/lib/Energiekennwerte.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import moment, { Moment } from "moment";
-
-export class Energiekennwerte {
- public zeitraum: Moment = moment();
- public verbrauch_1: number = 0;
- public verbrauch_2: number = 0;
- public verbrauch_3: number = 0;
- public verbrauch_4: number = 0;
- public verbrauch_5: number = 0;
- public verbrauch_6: number = 0;
- public einheit_1: string = "";
- public einheit_2: string = "";
- public energietraeger_1: string = "";
- public energietraeger_2: string = "";
- public anteil_warmwasser_1: number = 0;
- public anteil_warmwasser_2: number = 0;
- public warmwasser_enthalten: boolean = false;
- public zusaetzliche_heizquelle: boolean = false;
-
- public constructor(initializer?: Energiekennwerte) {
- if (initializer) {
- this.zeitraum = initializer.zeitraum;
- }
- }
-}
diff --git a/src/lib/Klimafaktoren.ts b/src/lib/Klimafaktoren.ts
index 76aaf3f6..b473ca26 100644
--- a/src/lib/Klimafaktoren.ts
+++ b/src/lib/Klimafaktoren.ts
@@ -6,7 +6,12 @@ export const getKlimafaktorenClient = memoize>
return [0, 0, 0];
}
- const response = await fetch(`/api/klimafaktor?date=${moment(date).format("YYYY-MM-DD")}&accuracy=years&zip=${zip}`);
+ const response = await fetch(`/api/klimafaktor?date=${moment(date).format("YYYY-MM-DD")}&accuracy=years&zip=${zip}`, {
+ method: "GET",
+ headers: {
+ "Content-Type": "application/json"
+ }
+ });
const json = await response.json();
if (!json.success) {
diff --git a/src/lib/client/fetch.ts b/src/lib/client/fetch.ts
new file mode 100644
index 00000000..e4adf1f8
--- /dev/null
+++ b/src/lib/client/fetch.ts
@@ -0,0 +1,9 @@
+export async function fetch(resourceUri: string, options?: RequestInit): Promise {
+ const response = await fetch(`/api/${resourceUri}`, options);
+
+ if (!response.ok) {
+ throw new Error("Fehler beim Abrufen der Daten.");
+ }
+
+ return response.json();
+}
\ No newline at end of file
diff --git a/src/lib/server/Klimafaktoren.ts b/src/lib/server/Klimafaktoren.ts
index c276c945..f5d09407 100644
--- a/src/lib/server/Klimafaktoren.ts
+++ b/src/lib/server/Klimafaktoren.ts
@@ -1,3 +1,5 @@
-export async function getKlimafaktorenServer(date: Date, zip: string) {
+export async function getKlimafaktorenServer(date: Date, zip: string, accuracy: "months" | "years" = "months"): Promise {
+
+ return null;
}
\ No newline at end of file
diff --git a/src/lib/server/fetch.ts b/src/lib/server/fetch.ts
new file mode 100644
index 00000000..aa1f4fe2
--- /dev/null
+++ b/src/lib/server/fetch.ts
@@ -0,0 +1,21 @@
+
+/**
+ * Dies ist die Server-Side Implementierung von fetch, die Daten werden direkt vom Server abgerufen.
+ * Dadurch können unnötige Requests vermieden werden.
+ * @date 9/20/2023 - 11:33:30 AM
+ *
+ * @export
+ * @async
+ * @param {string} resourceUri
+ * @param {?RequestInit} [options]
+ * @returns {Promise}
+ */
+export async function fetch(resourceUri: string, options?: RequestInit): Promise {
+ const response = await fetch(`http://localhost:3000/api/${resourceUri}`, options);
+
+ if (!response.ok) {
+ throw new Error("Fehler beim Abrufen der Daten.");
+ }
+
+ return response.json();
+}
\ No newline at end of file
diff --git a/src/pages/api/klimafaktor/index.ts b/src/pages/api/klimafaktor/index.ts
index 93b4f9e6..ccc5bae8 100644
--- a/src/pages/api/klimafaktor/index.ts
+++ b/src/pages/api/klimafaktor/index.ts
@@ -3,30 +3,26 @@ import moment from "moment";
import { ActionFailedError, InvalidDataError, MissingPropertyError, error, success } from "src/lib/APIResponse";
import { getClimateFactor } from "src/lib/Klimafaktoren/getClimateFactor";
-export const get: APIRoute = async function({ request }) {
- let body;
- try {
- body = Object.fromEntries(new URLSearchParams(request.url.split("?")[1]))
- } catch(e) {
- return error(["Failed to parse URL"]);
- }
+export const get: APIRoute = async function({ url }) {
+ const body = url.searchParams;
+ let zip = body.get("zip");
- if (!body.date) {
+ if (!body.get("date")) {
return MissingPropertyError(["date"]);
}
- let accuracy = body.accuracy || "months";
+ let accuracy = body.get("accuracy") || "months";
if (accuracy !== "months" && accuracy !== "years") {
return error(["Accuracy must be either 'months' or 'years'."])
}
- if (!body.zip) {
+ if (!zip) {
return error(["Invalid ZIP Code, must be 4 or 5 characters long."])
}
- let start = moment(body.date);
- let end = moment(body.date).add("2", "years");
+ let start = moment(body.get("date"));
+ let end = moment(body.get("date")).add("2", "years");
if (!start.isValid()) {
return error(["Invalid start date given."]);
@@ -49,7 +45,7 @@ export const get: APIRoute = async function({ request }) {
currentDate.add(1, accuracy);
}
- const climateFactors = await getClimateFactor(intervals, body.zip);
+ const climateFactors = await getClimateFactor(intervals, zip);
if (!climateFactors) {
return ActionFailedError();
diff --git a/tests/verbrauchsausweis/end-energie-verbrauch.test.ts b/tests/verbrauchsausweis/end-energie-verbrauch.test.ts
new file mode 100644
index 00000000..d154617a
--- /dev/null
+++ b/tests/verbrauchsausweis/end-energie-verbrauch.test.ts
@@ -0,0 +1,18 @@
+import { test, expect } from "bun:test";
+import { Verbrauchsausweis } from "#lib/Ausweis/Verbrauchsausweis";
+
+/**
+ * Wir erstellen einen neuen Verbrauchsausweis um unsere Tests durchzuführen.
+ */
+const ausweis = new Verbrauchsausweis();
+
+ausweis.ausstellgrund = "Vermietung";
+ausweis.baujahr_heizung = [1998];
+ausweis.verbrauch_1 = 10000;
+ausweis.verbrauch_2 = 10000;
+ausweis.verbrauch_3 = 10000;
+
+
+test("Endenergieverbrauch", async () => {
+
+});
\ No newline at end of file
diff --git a/vitest.config.ts b/vitest.config.ts
deleted file mode 100644
index b01a2638..00000000
--- a/vitest.config.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-///
-import { getViteConfig } from "astro/config";
-
-export default getViteConfig({
- test: {
- globals: true,
- },
-});