-- Was das Toolkit nach draussen geschickt hat. Eine Zeile je Plattform und -- Anlass. -- -- Der Zweck ist nicht Statistik, sondern Verhinderung: Twitch schickt nach -- einem Verbindungsabbruch ein zweites stream.online, und ohne diese Tabelle -- bekommt der Discord-Server dann einen zweiten Rundruf. Ein Ping zu viel -- kostet Abonnenten der Rolle, ein Ping zu wenig kostet nur einen Stream. -- stream_id ist bewusst KEIN Fremdschluessel. Ein Post ist die Quittung fuer -- etwas, das den Rechner verlassen hat; die muss auch dann schreibbar sein, -- wenn es die Sitzung in `streams` nicht gibt - beim Probelauf von -- `golive:test` etwa. Ein Fremdschluessel wuerde hier ausgerechnet das -- Protokoll verhindern, das erklaeren soll, was passiert ist. CREATE TABLE posts ( id TEXT PRIMARY KEY, stream_id TEXT, kind TEXT NOT NULL, -- golive | recap | clip platform TEXT NOT NULL, -- discord | bluesky | mastodon | ... mode TEXT NOT NULL, -- live | draft created_at TEXT NOT NULL, status TEXT NOT NULL, -- gesendet | fehlgeschlagen | entwurf title TEXT, category TEXT, url TEXT, -- Nachricht auf der Zielplattform detail TEXT -- Fehlertext, wenn es schiefging ); -- Die Frage, die vor jedem Post gestellt wird: gab es das hier schon? -- Nur gesendete Posts sperren; ein fehlgeschlagener Versuch darf wiederholt -- werden, sonst kostet ein Netzwerkaussetzer die Ankuendigung des Streams. CREATE UNIQUE INDEX idx_posts_einmal ON posts(stream_id, kind, platform) WHERE stream_id IS NOT NULL AND status = 'gesendet'; CREATE INDEX idx_posts_kind ON posts(kind, created_at);