93 lines
3.4 KiB
Markdown
93 lines
3.4 KiB
Markdown
# 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 <Titel>` 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 |
|