563716fa76
- Add $state-based entity cache layer with 30s TTL, request deduplication, and local mutation helpers (entity-cache.svelte.ts + caches.svelte.ts) - Wire all 10 page components to use shared caches for cross-page data - Add slide animation for nav tree expand/collapse with rotating chevron - Remove aggregate count badges from container nav nodes (keep on leaves) - Convert Targets from flat leaf to group with per-type children (Telegram, Webhook, Email, Discord, Slack, ntfy, Matrix) - Add URL-based type filtering on Targets page with per-type descriptions - Add Bots group children for Email and Matrix alongside Telegram - Tab-based routing for bots page (?tab=telegram/email/matrix) - Add per-type target counts and email/matrix bot counts to /status/counts - Split CLAUDE.md into focused context files under .claude/docs/ - Fix .gitignore: scope lib/ to root, allow .claude/docs/ tracking - Clear all caches on logout - Reset form state when switching target type tabs
20 lines
1.3 KiB
Markdown
20 lines
1.3 KiB
Markdown
# Entity Relationships
|
|
|
|
```
|
|
ServiceProvider → type: "immich" (inferred capabilities: notifications, commands)
|
|
NotificationTracker → provider_id, collection_ids, scan_interval, batch_duration, enabled
|
|
NotificationTrackerTarget → notification_tracker_id, target_id, tracking_config_id, template_config_id, quiet_hours, enabled
|
|
TrackingConfig → provider_type, event flags, scheduling rules
|
|
TemplateConfig → provider_type, Jinja2 template slots per event type
|
|
NotificationTarget → type: "telegram"/"webhook", config JSON, chat_action (telegram only)
|
|
CommandConfig → provider_type, enabled_commands, locale, response_mode, default_count, rate_limits
|
|
CommandTracker → provider_id, command_config_id, enabled
|
|
CommandTrackerListener → command_tracker_id, listener_type ("telegram_bot"), listener_id
|
|
TelegramBot → token, update_mode, bot_username (used as notification target backend + commands listener)
|
|
```
|
|
|
|
- NotificationTrackerTarget links a tracker to a target with per-link tracking/template config and quiet hours
|
|
- CommandTrackerListener links a command tracker to a listener (e.g. TelegramBot) for slash-command handling
|
|
- `user_id=0` on TemplateConfig = system default (EN/RU seeded on first startup)
|
|
- DB: SQLite + async SQLAlchemy via sqlmodel, auto-created on startup with migrations
|