suizid
This commit is contained in:
parent
94170330c7
commit
0b5ecf12d5
2 changed files with 176 additions and 0 deletions
124
DATENMODELL.md
Normal file
124
DATENMODELL.md
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
# Datenmodell & Struktur
|
||||
|
||||
## Entity-Relationship-Modell (ERM)
|
||||
|
||||
Das Datenmodell basiert auf vier Hauptentitäten: `User`, `Ticket`, `Room` und `Comment`.
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
USER ||--o{ TICKET : "erstellt / own"
|
||||
USER ||--o{ COMMENT : "verfasst"
|
||||
USER }|--|{ ROOM : "betreut (supervises)"
|
||||
ROOM ||--o{ TICKET : "beinhaltet"
|
||||
TICKET ||--o{ COMMENT : "hat"
|
||||
|
||||
USER {
|
||||
Long id PK
|
||||
String email
|
||||
String password
|
||||
String role
|
||||
String firstname
|
||||
String lastname
|
||||
String theme
|
||||
}
|
||||
|
||||
ROOM {
|
||||
Long id PK
|
||||
String name
|
||||
}
|
||||
|
||||
TICKET {
|
||||
Long id PK
|
||||
String title_de
|
||||
String title_en
|
||||
String description_de
|
||||
String description_en
|
||||
String status
|
||||
LocalDateTime createdAt
|
||||
Long user_id FK
|
||||
Long room_id FK
|
||||
}
|
||||
|
||||
COMMENT {
|
||||
Long id PK
|
||||
String text
|
||||
LocalDateTime createdAt
|
||||
Long user_id FK
|
||||
Long ticket_id FK
|
||||
}
|
||||
```
|
||||
|
||||
### Beziehungen Erklärung
|
||||
1. **User - Ticket (1:N)**: Ein Benutzer kann viele Tickets erstellen. Ein Ticket gehört immer genau einem Benutzer (Ersteller).
|
||||
2. **User - Comment (1:N)**: Ein Benutzer kann viele Kommentare verfassen.
|
||||
3. **User - Room (N:M)**: Ein Benutzer (z.B. Raumbetreuer) kann für mehrere Räume zuständig sein. Ein Raum kann von mehreren Benutzern betreut werden. Diese Beziehung wird über eine Join-Tabelle `user_rooms` abgebildet.
|
||||
4. **Room - Ticket (1:N)**: Ein Ticket bezieht sich immer auf einen spezifischen Raum. In einem Raum können viele Tickets gemeldet werden.
|
||||
5. **Ticket - Comment (1:N)**: Ein Ticket kann mehrere Kommentare enthalten (Diskussionsverlauf).
|
||||
|
||||
---
|
||||
|
||||
## Klassendiagramm (Backend Entitäten)
|
||||
|
||||
Die Implementierung im Spring Boot Backend (`de.itsolutions.ticketsystem.entity`) spiegelt das ERM wider.
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class User {
|
||||
-Long id
|
||||
-String name_firstname
|
||||
-String name_lastname
|
||||
-String email
|
||||
-String password
|
||||
-String role
|
||||
-String theme
|
||||
-List~Room~ supervisedRooms
|
||||
+getId()
|
||||
+getName()
|
||||
+getEmail()
|
||||
+getRole()
|
||||
}
|
||||
|
||||
class Ticket {
|
||||
-Long id
|
||||
-String title_de
|
||||
-String title_en
|
||||
-String description_de
|
||||
-String description_en
|
||||
-String status
|
||||
-LocalDateTime createdAt
|
||||
-User owner
|
||||
-Room room
|
||||
+getTitle()
|
||||
+getDescription()
|
||||
+getStatus()
|
||||
+getOwner()
|
||||
}
|
||||
|
||||
class Room {
|
||||
-Long id
|
||||
-String name
|
||||
+getId()
|
||||
+getName()
|
||||
}
|
||||
|
||||
class Comment {
|
||||
-Long id
|
||||
-String text
|
||||
-LocalDateTime createdAt
|
||||
-User author
|
||||
-Ticket ticket
|
||||
+getText()
|
||||
+getAuthor()
|
||||
}
|
||||
|
||||
User "1" --> "*" Ticket : owner
|
||||
User "1" --> "*" Comment : author
|
||||
User "*" --> "*" Room : supervisedRooms
|
||||
Room "1" --> "*" Ticket : room
|
||||
Ticket "1" --> "*" Comment : comments
|
||||
```
|
||||
|
||||
### Anmerkungen zur Implementierung
|
||||
* **Mehrsprachigkeit**: Die Entität `Ticket` speichert Titel und Beschreibung sowohl in Deutsch (`_de`) als auch in Englisch (`_en`), um Mehrsprachigkeit direkt auf Datenbankebene zu unterstützen.
|
||||
* **Sicherheit**: Das Passwort im `User` Objekt wird gehasht gespeichert (BCrypt).
|
||||
* **Zeitstempel**: `createdAt` Felder werden automatisch bei der Instanziierung (`LocalDateTime.now()`) gesetzt.
|
||||
52
SYSTEM_UEBERSICHT.md
Normal file
52
SYSTEM_UEBERSICHT.md
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
# Systemübersicht & Verwendete Technologien
|
||||
|
||||
## Frontend
|
||||
Das Frontend wurde als moderne Single-Page-Application (SPA) entwickelt und setzt auf folgende Technologien:
|
||||
|
||||
* **Framework**: Next.js 16 (React 19)
|
||||
* Sprache: TypeScript
|
||||
* Routing: App Router
|
||||
* **Styling**: Tailwind CSS
|
||||
* Komponentenbibliothek: Shadcn UI (basiert auf Radix UI)
|
||||
* Icons: Lucide React
|
||||
* **State & Form Management**:
|
||||
* React Hook Form (Formularvalidierung)
|
||||
* Zod (Schema-Validierung)
|
||||
* **Authentifizierung**: NextAuth.js
|
||||
* **Visualisierung**: Recharts (Diagramme)
|
||||
* **Datum/Zeit**: Date-fns
|
||||
|
||||
## Backend
|
||||
Das Backend ist als RESTful API konzipiert und basiert auf dem Spring Boot Framework:
|
||||
|
||||
* **Framework**: Spring Boot 3.2.2
|
||||
* Sprache: Java 21
|
||||
* **Sicherheit**: Spring Security (JWT / Session Handling, CORS Konfiguration)
|
||||
* **Datenbankzugriff**: Spring Data JPA (Hibernate)
|
||||
* **Tools**: Lombok (zur Reduzierung von Boilerplate-Code)
|
||||
* **Build Tool**: Maven
|
||||
|
||||
## Datenbank
|
||||
Als Datenbank kommt ein relationales Datenbankmanagementsystem zum Einsatz:
|
||||
|
||||
* **System**: PostgreSQL 16 (Betrieb via Docker)
|
||||
* **Name**: `ticketsystem`
|
||||
* **Verbindung**: JDBC
|
||||
|
||||
## Probleme & Lösungen
|
||||
|
||||
### CORS (Cross-Origin Resource Sharing)
|
||||
Ein wesentliches Problem während der Entwicklung war die CORS-Konfiguration (`Cross-Origin Resource Sharing`).
|
||||
|
||||
* **Problem**: Da Frontend (z.B. `localhost:3000`) und Backend (z.B. `localhost:8080` oder Docker-Netzwerk) auf unterschiedlichen Origins laufen, blockierten Browser standardmäßig die API-Anfragen des Frontends aus Sicherheitsgründen.
|
||||
* **Lösung**: Implementierung einer globalen CORS-Konfiguration im Backend (`SecurityConfig.java`).
|
||||
* Es wurde eine `CorsConfigurationSource` definiert.
|
||||
* Explizite Freigabe der erlaubten Origins:
|
||||
* `http://localhost:3000` (Lokale Entwicklung)
|
||||
* `https://projekt.lona-development.org` (Produktion Frontend)
|
||||
* `https://projektbackend.lona-development.org` (Produktion Backend)
|
||||
* Erlaubte HTTP-Methoden: `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `OPTIONS`.
|
||||
* Credentials (`setAllowCredentials(true)`) wurden aktiviert, um Authentifizierungs-Cookies/Header zuzulassen.
|
||||
|
||||
### Weitere Herausforderungen
|
||||
* **Docker Networking**: Konfiguration der Kommunikation zwischen Frontend- und Backend-Containern über das interne Docker-Netzwerk (`ticketsystem-network`), während das Frontend teilweise auch clientseitig (im Browser des Users) auf die API zugreifen muss. Die Lösung bestand darin, Umgebungsvariablen für API-URLs flexibel zu gestalten (`NEXT_PUBLIC_API_URL`).
|
||||
Loading…
Add table
Reference in a new issue