diff --git a/README.md b/README.md index f77f7fd2..a98118f2 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,113 @@ -# IBCornelsen Online Energieausweis +[![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 + + +

IBC Online Energieausweis

+ +

+ Online Energieausweis erstellen - IBCornelsen +
+ Dokumentation » +
+
+ Demo + · + Bug gefunden? + · + Feature Anfordern +

+
+ +- [Beschreibung](#beschreibung) + - [Anforderungen](#anforderungen) + - [Installation](#installation) +- [Nächste Schritte](#nächste-schritte) +- [Beiträge zu unserer Arbeit](#beiträge-zu-unserer-arbeit) +- [License](#license) +- [Kontakt](#kontakt) + + +## Beschreibung + +Dies ist das Repository für die Datenbank 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) + +### Anforderungen + +Die meisten unserer Systeme sind für Ubuntu gedacht und darauf getestet worden. Viele Funktionen werden ebenfalls auf Windows verfügbar sein, allerdings können unerwartetes Verhalten und Fehler nicht ausgeschlossen werden. + +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. + +### Installation + +1. Klone das Repository + + ```sh + git clone https://github.com/IBCornelsen/database.git + ``` + +2. Führe `docker-compose` aus. + + ```bash + docker-compose up --build + ``` + +## Nächste Schritte + +* [ ] Verteilte Datenbankstruktur +* [ ] Performance Optimierungen +* [ ] Umstieg auf PostgreSQL + * [ ] Umzug der alten Daten + +See the [open issues](https://github.com/IBCornelsen/database/issues) for a full list of proposed features (and known issues). + +## Beiträge zu unserer Arbeit + +Wenn du Ideen, Vorschläge oder sonstige Anmerkungen haben solltest, schreck' nicht davor zurück dein Feature zu implementieren und eine Pull Request zu erstellen, wir sind **immer** offen für neues! + +1. Erstelle einen **Fork** des Repos +2. Erstelle einen neuen Feature Branch (`git checkout -b feature/AmazingFeature`) +3. Committe deine Änderungen (`git commit -m 'Add some AmazingFeature'`) +4. Pushe deine Änderungen auf den neuen Branch (`git push origin feature/AmazingFeature`) +5. Öffne eine Pull Request + +## License + +Veröffentlicht unter der GPL-3.0 Lizenz. Siehe `LICENSE` für mehr Information. + +## Kontakt + +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 diff --git a/build.sh b/build.sh index caacb493..0358121c 100644 --- a/build.sh +++ b/build.sh @@ -47,8 +47,8 @@ echo "CERTIFICATE=$(cat /etc/letsencrypt/live/ibcornelsen.de/fullchain.pem | bas # Und starten unsere App wieder. docker run -d --name $APP_NAME --link $DB_CONTAINER_NAME \ -v "${PERSISTENT_DIR}:/persistent" \ - -p "$APP_PORT:80" \ - -e DB_CONNECTION=postgresql://$DB_USER:$DB_PASSWORD@${DB_CONTAINER_NAME}:$DB_PORT/$DB_NAME \ - -e DB_PORT=$DB_PORT \ - --env-file ~/apps/$APP_NAME/.env \ + -p "${APP_PORT}:80" \ + -e DB_CONNECTION=postgresql://${DB_USER}:${DB_PASSWORD}@${DB_CONTAINER_NAME}:${DB_PORT}/${DB_NAME} \ + -e DB_PORT=${DB_PORT} \ + --env-file ~/apps/${APP_NAME}/.env $APP_NAME; diff --git a/docker-compose.yml b/docker-compose.yml index b393aa36..72de1dd7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ services: container_name: online-energieausweis command: pnpm run dev --host links: - - db + - database environment: PORT: 3000 DB_CONNECTION: "postgresql://main:hHMP8cd^N3SnzGRR@database:5432/main" @@ -18,7 +18,7 @@ services: - ./persistent:/persistent networks: - postgres - db: + database: build: ../database ports: - "5436:5432" diff --git a/persistent/test.txt b/persistent/test.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/persistent/uploads/images/3bfcee31-723c-45fd-a716-1118e877bdbb.jpg b/persistent/uploads/images/3bfcee31-723c-45fd-a716-1118e877bdbb.jpg new file mode 100644 index 00000000..2ee7916b Binary files /dev/null and b/persistent/uploads/images/3bfcee31-723c-45fd-a716-1118e877bdbb.jpg differ diff --git a/persistent/uploads/images/c646b143-5cdf-47c9-859a-87731595b75f.jpg b/persistent/uploads/images/c646b143-5cdf-47c9-859a-87731595b75f.jpg new file mode 100644 index 00000000..30a8069f Binary files /dev/null and b/persistent/uploads/images/c646b143-5cdf-47c9-859a-87731595b75f.jpg differ diff --git a/persistent/uploads/images/c6ef6b29-d1ba-4076-996c-1cbf7d470eb9.jpg b/persistent/uploads/images/c6ef6b29-d1ba-4076-996c-1cbf7d470eb9.jpg new file mode 100644 index 00000000..cf8f91a5 Binary files /dev/null and b/persistent/uploads/images/c6ef6b29-d1ba-4076-996c-1cbf7d470eb9.jpg differ diff --git a/persistent/uploads/images/f89fb8e5-6902-4a50-8c07-ca2094c91dd6.jpg b/persistent/uploads/images/f89fb8e5-6902-4a50-8c07-ca2094c91dd6.jpg new file mode 100644 index 00000000..963f40b8 Binary files /dev/null and b/persistent/uploads/images/f89fb8e5-6902-4a50-8c07-ca2094c91dd6.jpg differ diff --git a/src/components/FeatureCard.svelte b/src/components/FeatureCard.svelte new file mode 100644 index 00000000..5176eeca --- /dev/null +++ b/src/components/FeatureCard.svelte @@ -0,0 +1,26 @@ + + +
+
+ Energieausweis erstellen + {heading} +
+
+
inkl. 19% MwSt
+
+ {price} +
+
+ + jetzt sofort Energieausweis online erstellen +
diff --git a/src/components/UploadImages.svelte b/src/components/UploadImages.svelte index 10a7d081..a802b2da 100644 --- a/src/components/UploadImages.svelte +++ b/src/components/UploadImages.svelte @@ -60,7 +60,7 @@ const dataURL = canvas.toDataURL("image/jpeg", 0.8); - fetch("/api/image", { + fetch("/api/image.json", { method: "PUT", body: JSON.stringify({ data: dataURL.split(';base64,')[1], diff --git a/src/pages/api/building/images.json.ts b/src/pages/api/building/images.json.ts new file mode 100644 index 00000000..0f6dcc6e --- /dev/null +++ b/src/pages/api/building/images.json.ts @@ -0,0 +1,25 @@ +import type { APIRoute } from "astro"; +import { + MissingEntityError, + error, + success, +} from "src/lib/APIResponse"; +import { db } from "src/lib/shared"; + +export const get: APIRoute = async ({ request }) => { + const body = Object.fromEntries(new URLSearchParams(request.url.split("?")[1])) + + if (!body.uid) { + return error(["Missing 'uid' in request body."]) + } + + const gebaeude = await db("gebaeude").where({ uid: body.uid }).first(); + + if (!gebaeude) { + return MissingEntityError("gebaeude") + } + + const images = await db("gebaeude_bilder").where({ gebaeude_id: gebaeude.id }).select("uid", "kategorie"); + + return success(images); +}; \ No newline at end of file diff --git a/src/pages/api/image.jpg.ts b/src/pages/api/image.jpg.ts new file mode 100644 index 00000000..f6341023 --- /dev/null +++ b/src/pages/api/image.jpg.ts @@ -0,0 +1,45 @@ +import type { APIRoute } from "astro"; +import { + MissingEntityError, + error, +} from "src/lib/APIResponse"; +import { z } from "zod"; +import * as path from "path"; +import * as fs from "fs"; +import { db } from "src/lib/shared"; + +const ImageUploadChecker = z.object({ + data: z.string(), + name: z.string(), + gebaeude_uid: z.string().optional(), + kategorie: z.string(), +}); + +export const get: APIRoute = async ({ request }) => { + const body = Object.fromEntries(new URLSearchParams(request.url.split("?")[1])) + + if (!body.uid) { + return error(["Missing 'uid' in request body."]) + } + + const image = await db("gebaeude_bilder").where({ uid: body.uid }).select("uid", "kategorie").first(); + + if (!image) { + return MissingEntityError("image") + } + + // Check if the image exists on disk + const location = path.join("/persistent/uploads/images", `${image.uid}.jpg`); + + if (!fs.existsSync(location)) { + return MissingEntityError("image") + } + + const data = fs.readFileSync(location); + + return new Response(data, { + headers: { + "Content-Type": "image/jpeg" + } + }); +}; \ No newline at end of file diff --git a/src/pages/api/image.ts b/src/pages/api/image.json.ts similarity index 72% rename from src/pages/api/image.ts rename to src/pages/api/image.json.ts index be9bde72..bd2ea3a3 100644 --- a/src/pages/api/image.ts +++ b/src/pages/api/image.json.ts @@ -8,6 +8,7 @@ import { import * as jimp from "jimp"; import { z } from "zod"; import * as path from "path"; +import * as fs from "fs"; import { db } from "src/lib/shared"; const ImageUploadChecker = z.object({ @@ -17,6 +18,31 @@ const ImageUploadChecker = z.object({ kategorie: z.string(), }); +export const get: APIRoute = async ({ request }) => { + const body = Object.fromEntries(new URLSearchParams(request.url.split("?")[1])) + + if (!body.uid) { + return error(["Missing 'uid' in request body."]) + } + + const image = await db("gebaeude_bilder").where({ uid: body.uid }).select("uid", "kategorie").first(); + + if (!image) { + return MissingEntityError("image") + } + + // Check if the image exists on disk + const location = path.join("/persistent/uploads/images", `${image.uid}.jpg`); + + if (!fs.existsSync(location)) { + return MissingEntityError("image") + } + + const data = fs.readFileSync(location, { encoding: "base64" }); + + return success(data); +}; + /** * Speichert ein Bild auf unserem Server ab und gibt die UID des Bildes zurück * @param param0 diff --git a/src/pages/index.astro b/src/pages/index.astro index 8d7fc6e4..bfdea8a0 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -2,6 +2,7 @@ import { BoxWithHeading } from "@ibcornelsen/ui"; import Widget from "../components/Widget.svelte"; import Layout from "../layouts/Layout.astro"; +import FeatureCard from "~/components/FeatureCard.svelte"; --- @@ -105,21 +106,7 @@ import Layout from "../layouts/Layout.astro";
-
-
- Energieausweis erstellen - Verbrauchsausweis
Wohngebäude -
-
-
inkl. 19% MwSt
-
- 45 -
-
+
Unsere Leistungen:
Prüfung durch Diplom Ingenieur
Energieausweis Vorschau als PDF
@@ -127,29 +114,9 @@ import Layout from "../layouts/Layout.astro";
Registrierung beim DiBt
Bearbeitung innhalb 24h
rechtssicher nach aktueller EnEV
-
telefonische Beratung
jetzt sofort Energieausweis online erstellen -
-
-
- Energieausweis erstellen - Bedarfsausweis
Wohngebäude -
-
-
- inkl. 19% MwSt -
-
- 75 -
-
+
telefonische Beratung
+ +
Unsere Leistungen:
Prüfung durch Diplom Ingenieur
Energieausweis Vorschau als PDF
@@ -157,29 +124,9 @@ import Layout from "../layouts/Layout.astro";
Registrierung beim DiBt
Bearbeitung innhalb 24h
rechtssicher nach aktueller EnEV
-
- telefonische Beratung -
jetzt sofort Energieausweis online erstellen -
-
-
- Energieausweis erstellen - Verbrauchsausweis
Gewerbe -
-
-
inkl. 19% MwSt
-
- 65 -
-
+
telefonische Beratung
+ +
Unsere Leistungen:
Prüfung durch Diplom Ingenieur
Energieausweis Vorschau als PDF
@@ -187,12 +134,8 @@ import Layout from "../layouts/Layout.astro";
Registrierung beim DiBt
Bearbeitung innhalb 24h
rechtssicher nach aktueller EnEV
-
telefonische Beratung
jetzt sofort Energieausweis online erstellen -
+
telefonische Beratung
+