# Feature: Meetings (einmalige Termine) ## Überblick Neben den wiederkehrenden **Jour-Fixes** können einzelne, einmalige Meetings direkt im Daily Log erfasst und dokumentiert werden. Meetings sind an einen konkreten Tag gebunden und enthalten Uhrzeit, Teilnehmer und ein freies Markdown-Notizfeld. ## Unterschied zu Jour-Fixes | | Jour-Fix | Meeting | |---|---|---| | Wiederkehrend | Ja | Nein | | Themen (Topics) | Ja, mit Historisierung | Nein | | Notizen | HistoryEntry pro Thema & Datum | Ein Markdown-Feld, wird überschrieben | | Teilnehmer | Nicht strukturiert | Explizites Feld | | Uhrzeit | Nicht strukturiert | Pflichtfeld | | Sichtbar in Sidebar | Ja (Favoriten) | Nein | | Stammdaten | Ja (AgendaContext type='meeting') | Ja (AgendaContext type='event') | ## Datenmodell Meetings werden als `AgendaContext` mit `type='event'` gespeichert. Metadaten liegen im `meta`-Feld als `EventMeta`: ```typescript interface EventMeta { date: string; // YYYY-MM-DD time: string; // HH:MM participants: string[]; // Klarnamen, ohne @-Präfix } ``` Die Notizen werden als ein einzelner `HistoryEntry` unter einem `__notes__`-Topic (`{contextId}-notes`) gespeichert. Beim Speichern wird der vorhandene Eintrag überschrieben — keine Versionierung. ## Bedienung ### Meeting anlegen **Variante 1 — Daily Log:** 1. Im Daily Log den gewünschten Tag auswählen 2. Auf **+ Meeting** (rechts über der Meetings-Sektion) klicken 3. Titel, Uhrzeit und Teilnehmer eingeben 4. **Erstellen** klicken **Variante 2 — CommandBar:** - `/meeting ` eingeben → Meeting für heute wird angelegt Die Uhrzeit wird beim Öffnen des Formulars mit der aktuellen Uhrzeit vorausgefüllt. ### Teilnehmer eingeben Das Teilnehmerfeld unterstützt `@mention`-Syntax: - `@` tippen → Dropdown mit Personen aus der Datenbank - Personen mit Leerzeichen im Namen werden automatisch gequotet: `@"Max Müller"` - Mehrere Teilnehmer durch Leerzeichen trennen: `@Anna @"Max Müller"` - Die Teilnehmer-Badges in der Ansicht sind klickbar → Absprung zur Person ### Notizen erfassen - Klick auf den Notizbereich öffnet den Markdown-Editor - `@mention`, `@P:Projekt`, `@F:Firma`-Verlinkungen funktionieren wie überall - **Ctrl+S** oder **Speichern**-Button zum Sichern ### Meeting bearbeiten Beim Hover über die Meeting-Karte erscheinen ✏️ und 🗑️: - ✏️ öffnet das Bearbeitungsformular für Titel, Uhrzeit und Teilnehmer - 🗑️ löscht das Meeting (Soft-Delete, wiederherstellbar über Papierkorb) ## Technische Details - Meetings erscheinen **nur im Daily Log** unter dem jeweiligen Datum - Sie erscheinen **nicht** in der Sidebar und nicht in der Kontext-Navigation - Der Sync läuft über den bestehenden `contexts`-Kanal — keine zusätzlichen Sync-Endpunkte erforderlich - Soft-Delete cascadiert auf das Notes-Topic und den HistoryEntry ## Relevante Dateien | Datei | Zweck | |---|---| | `shared/src/types.ts` | `EventMeta`, `ContextType = '...\|event'` | | `client/src/lib/db/repositories.ts` | `createEvent`, `updateEvent`, `updateEventNotes`, `getEventsForDate` | | `client/src/lib/stores/agenda.ts` | `eventsForDate(date)` liveQuery | | `client/src/lib/components/EventCard.svelte` | Meeting-Karte (Anzeige + Bearbeitung) | | `client/src/lib/components/JournalView.svelte` | Integration im Daily Log | | `client/src/lib/components/CommandBar.svelte` | `/meeting`-Befehl | | `server/src/db/schema.ts` | `type` Enum um `'event'` erweitert |