collabrix/ANNAHMEN.md
DGSoft 93b98cfb5c Initial commit: Team Chat System with Code Snippet Library
- Complete chat application similar to Microsoft Teams
- Code snippet library with syntax highlighting
- Real-time messaging with WebSockets
- File upload with Office integration
- Department-based permissions
- Dark/Light theme support
- Production deployment with SSL/Reverse Proxy
- Docker containerization
- PostgreSQL database with SQLModel ORM
2025-12-09 22:25:03 +01:00

245 lines
8.0 KiB
Markdown

# Annahmen und Design-Entscheidungen
## Architektur
### Backend
- **Framework:** FastAPI wurde gewählt wegen nativem async-Support, automatischer API-Dokumentation und moderner Type Hints
- **ORM:** SQLModel kombiniert SQLAlchemy mit Pydantic für typsichere Datenbankmodelle
- **Datenbank:** PostgreSQL 17 wie gefordert, mit vorkonfigurierter Test-DB
### Frontend
- **Framework:** React + TypeScript für typsichere Komponenten
- **Build-Tool:** Vite für schnelle Development-Experience
- **State Management:** React Context API (Auth, Theme) - ausreichend für mittlere Komplexität
- **Styling:** Tailwind CSS für schnelle, konsistente UI-Entwicklung
## Datenmodell
### User ↔ Department (Many-to-Many)
- Ein User kann mehreren Abteilungen angehören
- Implementiert via Link-Tabelle `user_department`
### Channel ↔ Department (One-to-Many)
- Jeder Channel gehört zu genau einer Abteilung
- Zugriff nur für Members dieser Abteilung
### Message ↔ Snippet (Optional Reference)
- Nachrichten können optional auf ein Snippet verweisen
- `snippet_id` ist nullable
- Bei Anzeige wird der Snippet-Code formatiert dargestellt
### Snippet Visibility
- **Private:** Nur Owner sieht es
- **Department:** Alle User in der gleichen Abteilung
- **Organization:** Alle authentifizierten User
- Implementiert via Enum `SnippetVisibility`
## Authentifizierung & Autorisierung
### JWT Bearer Tokens
- **Ablauf:** 30 Minuten (konfigurierbar)
- **Claims:** `sub` (username), `exp` (expiration)
- **Storage:** LocalStorage im Frontend (für Produktiv: HttpOnly Cookies erwägen)
### Passwörter
- **Hashing:** bcrypt via passlib
- **Rounds:** Default (12), sicher für Standard-Anwendungen
### Zugriffskontrolle
- **Channel:** User muss Member der zugehörigen Abteilung sein
- **Message:** Über Channel-Zugriff geprüft
- **Snippet:** Je nach Visibility-Level
- **File:** Über Message-Zugriff geprüft
## Datei-Upload
### Speicherung
- **Lokal:** Filesystem im `UPLOAD_DIR` (konfigurierbar)
- **Pfadstruktur:** Flat (alle Dateien in einem Verzeichnis)
- **Dateinamen:** UUID-basiert zur Vermeidung von Kollisionen
- **Metadaten:** In DB (FileAttachment-Tabelle)
### Limits
- **Max. Größe:** 20 MB (konfigurierbar)
- **Validierung:** Serverseitig vor Speicherung
- **MIME-Types:** Keine Einschränkung (in Production: Whitelist empfohlen)
### Download
- **Berechtigung:** Nur User mit Zugriff auf den Channel
- **Methode:** FileResponse via FastAPI
- **Original-Dateiname:** Wird im Response-Header gesetzt
## WebSocket
### Connection Management
- **Pro Channel:** Separate WebSocket-Verbindung
- **Authentifizierung:** Token via Query-Parameter `?token=...`
- **Broadcast:** Neue Nachrichten an alle aktiven Clients im Channel
- **Reconnect:** Client-seitig (im Frontend implementiert)
### Nachrichtenformat
```json
{
"type": "message",
"content": "...",
"sender": "username",
"channel_id": 1
}
```
## Code-Snippet-Bibliothek
### Tags
- **Format:** Kommagetrennte Strings in einem Feld
- **Suche:** Einfache LIKE/ILIKE-Queries
- **Rationale:** Einfach zu implementieren, ausreichend für MVP
- **Alternative:** Separate Tag-Tabelle (für Produktiv mit vielen Tags)
### Syntax-Highlighting
- **Frontend:** Manuelles `<pre><code>` ohne externe Library
- **Erweiterung:** Prism.js oder Highlight.js können leicht integriert werden
- **Theme-Support:** Code-Blöcke passen sich an Light/Dark-Theme an
### Filter & Suche
- **Language:** Exakte Übereinstimmung
- **Tags:** Enthält-Suche (any of)
- **Search:** Volltextsuche in Title + Content
- **Performance:** Für große Mengen: Full-Text-Search in PostgreSQL nutzen
## UI/UX
### Layout
- **3-Spalten-Ansicht:** Sidebar | Chat/Snippet-Liste | Detail
- **Teams-ähnlich:** Linke Sidebar für Navigation, Hauptbereich für Inhalt
- **Responsive:** Mobile-First mit Tailwind-Breakpoints
### Theme
- **Persistenz:** LocalStorage
- **Default:** System-Präferenz (könnte via `prefers-color-scheme` erweitert werden)
- **Toggle:** Globaler Button im Header
- **CSS:** Tailwind's `dark:` Klassen
### Navigation
- **React Router:** Client-side Routing
- **Protected Routes:** HOC `ProtectedRoute` prüft Auth-Status
- **Tabs:** Chat vs. Snippets über Links im Header
## Tests
### Test-Datenbank
- **SQLite In-Memory:** Schneller als PostgreSQL für Unit-Tests
- **Alternative:** Separate PostgreSQL-DB für Integration-Tests
- **Fixtures:** pytest Fixtures für User, Dept, Channel, etc.
### Test-Coverage
- **Auth:** Registrierung, Login, Token-Validierung
- **Channels:** CRUD, Zugriffskontrolle
- **Messages:** Erstellen, Laden, Channel-Berechtigung
- **Files:** Upload, Download, Größenlimit
- **Snippets:** CRUD, Visibility, Suche, Filter
### Test-Framework
- **pytest:** Standard für Python-Testing
- **TestClient:** FastAPI's HTTPX-basierter Client
- **Async:** pytest-asyncio für async Tests
## Skalierung & Performance
### Optimierungen (nicht implementiert, aber empfohlen für Produktiv)
1. **Caching:** Redis für Sessions, häufig abgerufene Daten
2. **Pagination:** Implementiert für Messages, sollte auch für Snippets erweitert werden
3. **Rate-Limiting:** Schutz vor Missbrauch (slowapi oder middleware)
4. **File-Storage:** S3-kompatible Lösung statt Filesystem
5. **WebSocket-Scaling:** Redis Pub/Sub für Multi-Server-Setup
6. **DB-Indizes:** Auf häufig gesuchten Feldern (language, tags, created_at)
7. **Query-Optimierung:** Eager Loading für Relations
## Sicherheit
### Implementiert
- ✅ Passwort-Hashing (bcrypt)
- ✅ JWT-Authentifizierung
- ✅ Zugriffskontrolle pro Ressource
- ✅ CORS-Konfiguration
- ✅ SQL-Injection-Schutz (via ORM)
- ✅ Dateigrößen-Limits
### Für Produktiv noch nötig
- ⚠️ HTTPS/TLS
- ⚠️ Rate-Limiting
- ⚠️ CSRF-Protection
- ⚠️ Content Security Policy
- ⚠️ Input-Sanitization (XSS)
- ⚠️ Datei-Type-Whitelist
- ⚠️ Audit-Logging
- ⚠️ 2FA/MFA
## Deployment
### Docker
- **Multi-Stage Build:** Optimierte Images
- **Health-Checks:** PostgreSQL-Readiness vor Backend-Start
- **Volumes:** Persistente Daten (DB, Uploads)
- **Networks:** Isolierte Container-Kommunikation
### Umgebungsvariablen
- Alle sensiblen Daten via `.env`
- Produktiv: Secrets-Management (Vault, AWS Secrets Manager)
## Erweiterungsmöglichkeiten
### Kurzfristig
1. **Snippet-Versioning:** Historie von Snippet-Änderungen
2. **User-Profil:** Avatar, Bio, Präferenzen
3. **Notifications:** In-App-Benachrichtigungen für @mentions
4. **Emoji-Reactions:** React auf Nachrichten
5. **Thread-Replies:** Diskussionen organisieren
### Mittelfristig
1. **Video/Voice-Calls:** WebRTC-Integration
2. **Screen-Sharing:** Für Präsentationen
3. **Advanced Search:** ElasticSearch für bessere Suche
4. **Analytics:** Dashboard für Chat-Aktivität
5. **Admin-Panel:** User-/Department-Management
### Langfristig
1. **Mobile Apps:** React Native oder native iOS/Android
2. **Desktop App:** Electron-Wrapper
3. **Integrations:** Jira, GitHub, GitLab, Slack
4. **Bot-Framework:** Automatisierte Antworten, Workflows
5. **AI-Features:** Smart Replies, Sentiment-Analyse
## Technische Schulden & Kompromisse
### Bekannte Limitierungen
1. **Tag-System:** Einfache String-Liste, keine Autovervollständigung
2. **WebSocket-Auth:** Token in Query-String (Alternative: Cookie-basiert)
3. **File-Storage:** Lokal statt Object-Storage
4. **No Email:** Keine E-Mail-Benachrichtigungen implementiert
5. **No Pagination:** Snippets ohne Pagination (bei vielen Snippets Problem)
### Rationale
- **MVP-Fokus:** Schnelle Entwicklung, Kernfunktionen zuerst
- **Einfachheit:** Weniger externe Dependencies
- **Verständlichkeit:** Code für Team leicht wartbar
## Lessons Learned
### Was gut funktioniert
- SQLModel: Sehr typsicher, wenig Boilerplate
- FastAPI: Automatische Docs, schnelle Entwicklung
- Tailwind: Schnelles Styling ohne Custom CSS
- Docker-Compose: Einfaches lokales Setup
### Was verbessert werden könnte
- WebSocket-Reconnect-Logik robuster machen
- Mehr End-to-End-Tests
- CI/CD-Pipeline aufsetzen
- Monitoring & Logging strukturieren
---
**Autor:** Senior-Entwickler
**Datum:** 2025-12-06
**Version:** 1.0