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] - -
- - Logo + + Logo -

IBC Online Energieausweis

+

IBCornelsen Online Energieausweis

Online Energieausweis erstellen - IBCornelsen @@ -19,11 +12,11 @@ Dokumentation »

- Demo + Demo · - Bug gefunden? + Bug gefunden? · - Feature Anfordern + Feature Anfordern

@@ -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: - -![Datenbankstruktur](images/struktur.png) +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, - }, -});