docs: Shared Messages Feature in ARCHITECTURE.md, ARCHITECTURE_QUICK.md und TODO.md ergänzt
- ARCHITECTURE.md: Neues Kapitel 17 (Nachrichten teilen), ER-Diagramm, Tabelle shared_messages, SharedEndpoint, Auth-Ausnahme, Frontend-Route, Dateibaum aktualisiert, Endpoint-Anzahl 14→15 - ARCHITECTURE_QUICK.md: Tabelle, Endpoint, Route, Auth-Ausnahme ergänzt - TODO.md: Share-Feature als erledigt markiert, neuen Punkt für Share-Verwaltung hinzugefügt
This commit is contained in:
1 parent
be29984b25
commit
1693ace243
3 files changed
+66
-9
No files matched your search
+59
-7
@@ -28,11 +28,12 @@
|
||||
14. [Cronjob-System](#cronjob-system)
|
||||
15. [Krea-Bildgenerierung](#krea-bildgenerierung)
|
||||
16. [Auth & Multi-User](#auth--multi-user)
|
||||
17. [Workspace & File-Explorer](#workspace--file-explorer)
|
||||
18. [Windows Desktop App](#windows-desktop-app)
|
||||
19. [Deployment](#deployment)
|
||||
20. [Konfiguration](#konfiguration)
|
||||
21. [Datenbank-Migrationen](#datenbank-migrationen)
|
||||
17. [Nachrichten teilen (Shared Messages)](#nachrichten-teilen-shared-messages)
|
||||
18. [Workspace & File-Explorer](#workspace--file-explorer)
|
||||
19. [Windows Desktop App](#windows-desktop-app)
|
||||
20. [Deployment](#deployment)
|
||||
21. [Konfiguration](#konfiguration)
|
||||
22. [Datenbank-Migrationen](#datenbank-migrationen)
|
||||
|
||||
---
|
||||
|
||||
@@ -102,6 +103,7 @@ gott/
|
||||
│ ├── ArchiveRecord.cs
|
||||
│ ├── CronjobRecord.cs
|
||||
│ ├── KreaImageRecord.cs
|
||||
│ ├── SharedMessageRecord.cs # Geteilte Nachrichten (Share-Token)
|
||||
│ ├── ChatModels.cs # ChatMessage, ChatRequest, AttachmentInfo/Block
|
||||
│ └── ChatContext.cs # Runtime-Kontext für einen Chat
|
||||
│
|
||||
@@ -131,6 +133,7 @@ gott/
|
||||
│ ├── CronjobEndpoint.cs # CRUD + Toggle, Manual Run
|
||||
│ ├── KreaEndpoint.cs # Generate, List, File-Serve
|
||||
│ ├── SkillEndpoint.cs # List, Agent-Skill-Mapping, Output-Files
|
||||
│ ├── SharedEndpoint.cs # Nachrichten teilen (öffentliche Links)
|
||||
│ ├── ProfileEndpoint.cs # Profil, Persona, Passwort
|
||||
│ ├── SettingsEndpoint.cs # User-Settings (JSON blob)
|
||||
│ ├── BackupEndpoint.cs # Backup als tar.gz Download
|
||||
@@ -187,7 +190,8 @@ gott/
|
||||
│ │ │ ├── cronjob-page.js # Cronjob-Verwaltung
|
||||
│ │ │ ├── profile-page.js # Profil-Bearbeitung
|
||||
│ │ │ ├── settings-page.js # App-Einstellungen
|
||||
│ │ │ └── login-page.js # Login-Formular
|
||||
│ │ │ ├── login-page.js # Login-Formular
|
||||
│ │ │ └── shared-page.js # Öffentliche geteilte Nachricht
|
||||
│ │ └── lib/ # Vendor-Libraries
|
||||
│ │ ├── marked.min.js # Markdown Parser
|
||||
│ │ ├── codemirror.min.js # Code Editor
|
||||
@@ -239,6 +243,8 @@ Chain (1) ─── (*) Message
|
||||
Message (1) ─── (*) Attachment
|
||||
Session (1) ─── (*) Cronjob
|
||||
User (1) ─── (*) Cronjob
|
||||
User (1) ─── (*) SharedMessage
|
||||
Message (1) ─── (*) SharedMessage
|
||||
```
|
||||
|
||||
### Tabellen
|
||||
@@ -255,6 +261,7 @@ User (1) ─── (*) Cronjob
|
||||
| `archives` | Archivierte Chain-Gruppen |
|
||||
| `agent_skills` | Agent ↔ Skill Zuordnung |
|
||||
| `cronjobs` | Geplante Tasks (cron expression, prompt) |
|
||||
| `shared_messages` | Geteilte Nachrichten (Share-Token, Ablaufdatum) |
|
||||
| `telegram_links` | Telegram Chat ↔ Session Verknüpfung |
|
||||
|
||||
### Zentrale Records
|
||||
@@ -289,7 +296,7 @@ Die `Program.cs` ist der zentrale Einstiegspunkt und konfiguriert:
|
||||
2. **Datenbank-Initialisierung** – `DatabaseService` erstellt Schema + Migrationen
|
||||
3. **Default-User** – Wird automatisch angelegt falls keine User existieren
|
||||
4. **Middleware** – Static Files → `AuthMiddleware` → Endpoints
|
||||
5. **Endpoint-Mapping** – Alle 14 Endpoint-Gruppen registriert
|
||||
5. **Endpoint-Mapping** – Alle 15 Endpoint-Gruppen registriert
|
||||
6. **Server** – Kestrel auf `http://0.0.0.0:19000`
|
||||
|
||||
Initialisierungsreihenfolge:
|
||||
@@ -338,6 +345,7 @@ Alle Endpoints folgen dem **Minimal API**-Pattern mit Extension Methods (`MapXxx
|
||||
| **Profile** | `/api/profile` | `GET`, `PUT`, `PUT password` |
|
||||
| **Settings** | `/api/settings` | `GET`, `PUT` |
|
||||
| **Backup** | `/api/backup` | `POST` (Admin only, tar.gz Download) |
|
||||
| **Shared** | `/api/shared/`, `/api/messages/{id}/share` | Share erstellen, öffentlich abrufen, auflisten, löschen |
|
||||
| **Info** | `/api/info` | `GET` (Build-Zeitstempel) |
|
||||
|
||||
### Middleware
|
||||
@@ -348,6 +356,7 @@ Ausnahmen (kein Auth nötig):
|
||||
- Statische Dateien (nicht `/api/`)
|
||||
- `POST /api/auth/login`
|
||||
- `POST /api/telegram/webhook/{sessionId}` (authentifiziert via Secret-Header)
|
||||
- `GET /api/shared/{token}` (öffentlicher Zugriff auf geteilte Nachrichten)
|
||||
|
||||
Bei Erfolg werden `UserId` und `IsAdmin` in `HttpContext.Items` gesetzt.
|
||||
|
||||
@@ -389,6 +398,7 @@ Das Frontend ist eine **Single-Page Application** ohne Build-Step, komplett in V
|
||||
| `#/profile` | `profile-page.js` | Profil |
|
||||
| `#/settings` | `settings-page.js` | App-Einstellungen |
|
||||
| `#/login` | `login-page.js` | Login |
|
||||
| `#/shared/{token}` | `shared-page.js` | Öffentliche geteilte Nachricht (kein Auth) |
|
||||
|
||||
### Kern-Module
|
||||
|
||||
@@ -757,6 +767,48 @@ Jeder User hat eine optionale **Persona** – ein Freitext der beschreibt wer er
|
||||
|
||||
---
|
||||
|
||||
## Nachrichten teilen (Shared Messages)
|
||||
|
||||
Einzelne Nachrichten oder ganze Threads können als **öffentliche Links** geteilt werden – ohne Login aufrufbar.
|
||||
|
||||
### Datenmodell
|
||||
|
||||
**Tabelle `shared_messages`:**
|
||||
| Spalte | Typ | Beschreibung |
|
||||
|------------------|---------|-------------------------------------------|
|
||||
| `id` | INTEGER | Primary Key |
|
||||
| `share_token` | TEXT | UUID – öffentlicher Zugangsschlüssel |
|
||||
| `message_id` | INTEGER | FK auf `messages.id` |
|
||||
| `user_id` | INTEGER | Wer hat geteilt |
|
||||
| `include_context`| INTEGER | 0 = Einzelnachricht, 1 = Thread bis dahin |
|
||||
| `created_at` | TEXT | Erstellzeitpunkt |
|
||||
| `expires_at` | TEXT | Optional: Ablaufdatum |
|
||||
|
||||
### API-Endpunkte (`SharedEndpoint.cs`)
|
||||
|
||||
| Methode | Route | Auth | Beschreibung |
|
||||
|----------|--------------------------------|------|---------------------------------------|
|
||||
| `POST` | `/api/messages/{id}/share` | ✅ | Share erstellen (Body: `{includeContext}`) |
|
||||
| `GET` | `/api/shared/{token}` | ❌ | Öffentlich: Geteilte Nachricht abrufen |
|
||||
| `GET` | `/api/shared` | ✅ | Eigene Shares auflisten |
|
||||
| `DELETE` | `/api/shared/{token}` | ✅ | Share-Link widerrufen |
|
||||
|
||||
### Frontend-Flow
|
||||
|
||||
1. **Share-Button** (🔗) erscheint an jeder Nachricht im Chat (neben Reply, Delete, Mark)
|
||||
2. Klick öffnet **Kontext-Menü**: "Einzelne Nachricht" oder "Thread teilen"
|
||||
3. `POST /api/messages/{id}/share` → Token zurück → URL in Zwischenablage kopiert
|
||||
4. **Toast**: "Link kopiert!"
|
||||
|
||||
### Öffentliche Ansicht (`#/shared/{token}`)
|
||||
|
||||
- Route `#/shared/{token}` → `shared-page.js`
|
||||
- **Kein Auth nötig** – Auth-Bypass in `app.js` + `AuthMiddleware`
|
||||
- Minimales Layout: Header ("// gott · Geteilte Nachricht"), Nachrichten mit Markdown-Rendering
|
||||
- Zwei Modi: `single` (eine Nachricht) oder `context` (Thread mit User/Assistant-Wechsel)
|
||||
|
||||
---
|
||||
|
||||
## Workspace & File-Explorer
|
||||
|
||||
### Workspace
|
||||
|
||||
Reference in new issue
Block a user