https://github.com/oblassgit/3fa071_gruppe5
school project
https://github.com/oblassgit/3fa071_gruppe5
Last synced: 2 months ago
JSON representation
school project
- Host: GitHub
- URL: https://github.com/oblassgit/3fa071_gruppe5
- Owner: oblassgit
- Created: 2024-10-07T09:16:15.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-31T08:50:58.000Z (over 1 year ago)
- Last Synced: 2025-01-31T09:29:54.725Z (over 1 year ago)
- Language: Java
- Homepage:
- Size: 336 KB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 3FA071_Gruppe5
[](https://github.com/oblassgit/3FA071_Gruppe5/actions/workflows/maven-test.yml)
[Link zur Benutzeroberfläche](https://github.com/oblassgit/3FA071_Gruppe5_UI)
## ✅ Testabdeckung
[███████████████████████████████████████████████████░░░░░░░░░░░░░] 80%
___
## Deployment-Anleitung
Die Datenbankeinstellungen:
- Suche die File "DbData" unter "src/main/resources".
- Koppiere die ersten 3 auskommentierten Zeilen und setze sie unter die schon bestehenden Benutzer ein.
- Aktiviere sie indem die "#" entfernt werden.
- Tausche den "User" durch deinen eingenen Benutzer aus.
Hinweis: Öffne ein Terminal und benutze den Befehl "whoami" um den derzeitigen Benutzer herauszufinden.
- nun Trage noch folgendes nach dem = ein:
"deinBenutzer.db.url=" --> deine Datenbank URL nach dem =
"deinBenutzer.db.user=" --> dein Datenbank User nach dem =
"deinBenutzer.db.pw=" --> dein Passwort für die Datenbank nach dem =
das Programm starten:
- Erster Step : Führe diesen Befehlt aus um das Backend zu starten -> "mvn clean compile exec:java".
- Zweiter Step : Installiere NPM mit dem Befehlt -> "npm install".
- Dritter Step : Führe diesen Befehl aus um das Backend zu starten -> "npm run preview".
Fertig🤲
Nun sollte die App unter dem Link aufrufbar sein, der im gleichen Terminal angezeigt wird.
## 🔧 Softwarearchitektur
Die Anwendung ist dreischichtig aufgebaut:
### 🖧 Backend – Java (Jersey)
- Sprache: **Java 21**
- REST-API mit **JAX-RS (Jersey 3.x)**
- Struktur: Ressourcen- / Service- / DAO-Schicht
- JSON/XML/CSV-Serialisierung via **Jackson**
- Build-Tool: **Maven**
- Tests: **JUnit 5**, **Mockito**
- Code-Coverage: **JaCoCo**
### 🖥️ Frontend – Vue.js
- Framework: **Vue.js 3** (Composition API)
- Sprache: **JavaScript (ES6+)**
- API-Kommunikation über **Axios** via REST (HTTP)
- Build-Tool: **Vite** oder **Vue CLI**
- Datenformat: **JSON**
### 🗄️ Datenbank – MariaDB
- Typ: **Relationale SQL-Datenbank**
- Engine: **MariaDB** (Version ≥ 10.x)
- JDBC-Treiber: `mariadb-java-client` (v3.3.3)
- Zugriff über DAO mit JDBC
- Konfiguration via `.env` / `application.properties`
### 🔗 API-Spezifikation
- Architektur: **RESTful API**
- Methoden: `GET`, `POST`, `PUT`, `DELETE`
- Standardformat: **JSON**, optional: XML / CSV
___
## 📡 REST API Endpunkte
### Kunden-API – `/customers`
- **GET `/customers`**: Liste von Kunden, optional mit Filtern (z.B. `start`, `end`, `gender`)
- **GET `/customers/{uuid}`**: Einzelner Kunde per UUID
- **DELETE `/customers/{uuid}`**: Löscht einen Kunden
- **POST `/customers`**: Erstellt einen neuen Kunden
- **PUT `/customers`**: Aktualisiert einen bestehenden Kunden
- **GET `/customers/export/csv`**: CSV-Export aller Kunden
- **GET `/customers/export/xml`**: XML-Export aller Kunden
### Readings-API – `/readings`
- **GET `/readings`**: Filter: `customer`, `start`, `end`, `kindOfMeter`
- **GET `/readings/{uuid}`**: Einzelner Reading-Eintrag
- **DELETE `/readings/{uuid}`**: Löscht einen Reading-Eintrag
- **POST `/readings`**: Legt einen neuen Reading-Eintrag an
- **PUT `/readings`**: Aktualisiert einen bestehenden Reading-Eintrag
- **GET `/readings/export/xml`**: Exportiert alle Readings als `.xml`
- **GET `/readings/export/csv`**: Exportiert alle Readings als `.csv`
## UML Sequenzdiagramm für Beispiel GetCustomer
```
┌─┐ ,.-^^-._
║"│ |-.____.-|
└┬┘ | |
┌┼┐ ┌──────────────────┐ | |
│ ┌───────────────┐ │Jersey Resource │ ┌───────────┐ | |
┌┴┐ │Vue.js Frontend│ │(CustomerResource)│ │CustomerDao│ '-.____.-'
User └───────┬───────┘ └─────────┬────────┘ └─────┬─────┘ Database
│ │ │ │ │
│ │ ╔═══════════════╧═╗ │ │
════════╪═══════════════════════════════════════════╪════════════════════════════╣ Filter auslösen ╠═══════════════════════════════════════╪═══════════════════════════════╪══════════
│ │ ╚═══════════════╤═╝ │ │
│ │ │ │ │
│Select filter (startDate, endDate, gender) │ │ │ │
│──────────────────────────────────────────>│ │ │ │
│ │ │ │ │
│ │────┐ │ │ │
│ │ │ build query params │ │ │
│ │<───┘ │ │ │
│ │ │ │ │
│ │GET /customers?start=...&end=...&gender=... │ │ │
│ │───────────────────────────────────────────>│ │ │
│ │ │ │ │
│ │ │getCustomers(startDate, endDate, gender) │ │
│ │ │────────────────────────────────────────>│ │
│ │ │ │ │
│ │ │ │ SQL SELECT * FROM customer │
│ │ │ │ WHERE ... (with filters) │
│ │ │ │──────────────────────────────>│
│ │ │ │ │
│ │ │ │ResultSet (filtered customers) │
│ │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ │ │ │ │
│ │ │ List │ │
│ │ │<────────────────────────────────────────│ │
│ │ │ │ │
│ │ HTTP 200 OK │ │ │
│ │ JSON CustomerList │ │ │
│ │<───────────────────────────────────────────│ │ │
│ │ │ │ │
│ │────┐ │ │ │
│ │ │ Render customer list │ │ │
│ │<───┘ │ │ │
User ┌───────┴───────┐ ┌─────────┴────────┐ ┌─────┴─────┐ Database
┌─┐ │Vue.js Frontend│ │Jersey Resource │ │CustomerDao│ ,.-^^-._
║"│ └───────────────┘ │(CustomerResource)│ └───────────┘ |-.____.-|
└┬┘ └──────────────────┘ | |
┌┼┐ | |
│ | |
┌┴┐ '-.____.-'
```
___
## UML Relationmodell:
```
┌──────────────────────────────────┐
│customer │
├──────────────────────────────────┤
│* id : UUID │
│-- │
│first_name : VARCHAR(100) │
│last_name : VARCHAR(100) │
│birth_date : DATE │
│gender : ENUM('D','M','U','W')│
└──────────────────────────────────┘
|
|
┌────────────────────────────────────────────────────────────────┐
│reading │
├────────────────────────────────────────────────────────────────┤
│* id : UUID │
│-- │
│customer_id : UUID │
│comment : VARCHAR(1000) │
│date_of_reading : DATE │
│meter_count : INT │
│meter_id : VARCHAR(100) │
│kind_of_meter : ENUM('HEIZUNG','STROM','WASSER','UNBEKANNT')│
│substitute : BOOL │
└────────────────────────────────────────────────────────────────┘
```
___
## CI/CD Pipeline: Maven-Test
Automatisiert Tests und Coverage-Analyse bei jedem Push/Pull Request auf `main`.
### Schritte:
1. **Repository Checkout**: Lädt den Code.
2. **MariaDB Setup**: Startet eine MariaDB-Instanz mit definierten Secrets.
3. **Verbindungsprüfung**: Testet die Datenbankverbindung.
4. **JDK 21 Setup**: Installiert Java 21.
5. **Datenbankkonfiguration**: Schreibt Verbindungsdaten in `DbData.properties`.
6. **Build und Tests**: Führt `mvn site -P test` aus.
7. **Coverage-Report**: Zeigt Coverage-Details im PR an (min. 50 % gesamt, 80 % geänderte Dateien).