Release 0.7.0
This commit is contained in:
1 parent
d586fbd8ce
commit
6d96900d81
27 files changed
+2060
-25
No files matched your search
+43
-6
@@ -3,7 +3,7 @@
|
||||
## Systemgrenze
|
||||
|
||||
Sendewerk ist ein einzelner SvelteKit-Prozess. Browserseiten, serverseitige
|
||||
Actions, spätere REST-Endpunkte und Hintergrundaufgaben verwenden dieselbe
|
||||
Actions, REST-Endpunkte und Hintergrundaufgaben verwenden dieselbe
|
||||
Geschäftslogik. SQLite und ein lokales Upload-Verzeichnis sind die einzigen
|
||||
persistenten Laufzeitabhängigkeiten. Externe Mail-, RSS- oder KI-Dienste sind
|
||||
nicht Voraussetzung für Kernfunktionen.
|
||||
@@ -11,7 +11,7 @@ nicht Voraussetzung für Kernfunktionen.
|
||||
```text
|
||||
Browser -> SvelteKit-Routen -> Anwendungsdienste -> SQLite
|
||||
| -> Upload-Verzeichnis
|
||||
+-> später: Mail/RSS über Adapter
|
||||
+-> Mail/RSS über begrenzte Adapter
|
||||
```
|
||||
|
||||
Servercode lebt unter `src/lib/server` und darf nicht in Browser-Bundles
|
||||
@@ -33,13 +33,13 @@ spätere API dieselben Regeln verwenden.
|
||||
|
||||
## Gesamtdatenmodell
|
||||
|
||||
Die ersten sechs Etappen materialisieren Identität, Inhaltsverwaltung,
|
||||
Sendungsplanung, Live-Durchführung, Historie und Lesefreigaben. Folgende Grenzen
|
||||
gelten für umgesetzte und spätere Bereiche.
|
||||
Die ersten sieben Etappen materialisieren Identität, Inhaltsverwaltung,
|
||||
Sendungsplanung, Live-Durchführung, Historie, Lesefreigaben, RSS-Import und eine
|
||||
technische API. Folgende Grenzen gelten für umgesetzte und spätere Bereiche.
|
||||
|
||||
| Bereich | Geplante Entitäten und Beziehungen |
|
||||
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Identität | `users`, Rollen, Sessions, Einladungen, Reset-Tokens und Sperren sind umgesetzt; technische Zugänge folgen später |
|
||||
| Identität | `users`, Rollen, Sessions, Einladungen, Reset-Tokens und Sperren sowie getrennte technische Zugänge |
|
||||
| Taxonomie | getrennte `section_categories`, `formats`, `topics` samt optionalem Themenicon; Pieces und Vorschläge mehrfach verknüpft |
|
||||
| Inhalt | `pieces` mit Status, Soft Delete, Favorit, Revision, Texten, Quellen, Werkzeugen und privaten Medien; Vorlagen speichern Snapshots |
|
||||
| Sendungsbau | `shows`, geordnete `show_sections`, `piece_usages` samt Quellen-/Werkzeug-/Themen-/Mediensnapshots, Reservebank und Vorlagen |
|
||||
@@ -99,6 +99,43 @@ konfigurierten Outbox-Pfad, `smtp` nutzt Nodemailer nur nach expliziter Auswahl.
|
||||
Die feste Anwendungs-Origin erzeugt Links und bestimmt den `Secure`-Status der
|
||||
Cookies; sie wird nicht aus ungeprüften Request-Headern übernommen.
|
||||
|
||||
Technische Zugänge sind keine Browsersitzungen. Sie besitzen zufällige
|
||||
Bearer-Tokens, von denen nur SHA-256-Hashes gespeichert werden, und genau einen
|
||||
der Umfänge `read` oder `read_write`. Widerruf wirkt beim nächsten Request.
|
||||
`/api/v1` umgeht lediglich den Browser-Loginredirect; jeder Endpunkt prüft Token
|
||||
und erforderlichen Umfang selbst. Schreibzugriffe hinterlassen ein
|
||||
`audit_event`; Neuanlage und Planungsänderungen verlangen zusätzlich einen je
|
||||
Zugang eindeutigen, persistent gespeicherten Idempotenzschlüssel.
|
||||
|
||||
## RSS-Import
|
||||
|
||||
`src/lib/server/feeds.ts` bildet Abruf, XML-Verarbeitung und Übernahme gemeinsam
|
||||
für manuelle Aktionen und den Prozess-Scheduler ab. Der Scheduler startet beim
|
||||
ersten Request und prüft minütlich höchstens zehn fällige aktive Feeds. Jeder
|
||||
Feed wird getrennt behandelt, sodass ein Fehler weitere Abrufe nicht stoppt.
|
||||
HTTP-Abrufe erlauben nur HTTP(S) auf Standardports, prüfen DNS sowie jedes
|
||||
Redirectziel gegen interne Adressen und begrenzen Laufzeit, Redirects und
|
||||
Antwortgröße. RSS/Atom wird mit deaktivierter Entity-Verarbeitung gelesen;
|
||||
höchstens 200 Einträge je Antwort werden berücksichtigt und fremdes HTML wird zu
|
||||
reinem Text reduziert.
|
||||
|
||||
`feed_entries` ist ein eigener Eingang. `(feed_id, external_id)` verhindert
|
||||
Dubletten; Aktualisierungen ändern den redaktionellen Status nicht. `discarded`
|
||||
bleibt deshalb auch nach späteren Abrufen erhalten. Erst die bewusste
|
||||
Mehrfachauswahl erzeugt innerhalb einer Transaktion normale Inbox-Pieces mit
|
||||
Kategorien und Original-URL als Quelle und setzt den Eintrag auf `imported`.
|
||||
|
||||
## Technische REST-API
|
||||
|
||||
Die Routen unter `/api/v1` bilden keine zweite Fachlogik, sondern rufen
|
||||
`content.ts` und `shows.ts` auf. Piece- und Sendungsrevisionen schützen weiterhin
|
||||
vor verlorenen Änderungen. `api_idempotency` speichert Request-Hash, Status und
|
||||
JSON-Antwort, sodass wiederholte Schreibbefehle dasselbe Ergebnis liefern und
|
||||
ein gleicher Schlüssel mit verändertem Inhalt abgewiesen wird. Die OpenAPI-3.1-
|
||||
Beschreibung ist unter `/api/v1/openapi.json` erreichbar. Ein MCP-Adapter oder
|
||||
produktspezifischer KI-Client gehört nicht zur Laufzeit und ist nicht
|
||||
Voraussetzung für die Bedienung.
|
||||
|
||||
## Inhalte, Markdown und Medien
|
||||
|
||||
Etappe 3 führt die Inhaltslogik in `src/lib/server/content.ts` zusammen. Listen
|
||||
|
||||
Reference in new issue
Block a user