Jesko Anschütz
fc5587c171
fix: Zeitformat-Validierung + pgx.ErrNoRows in ScreenScheduleStore.Get
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 07:21:01 +01:00
Jesko Anschütz
83af005fad
feat(api): POST /api/v1/screens/{slug}/schedule + Scheduler verdrahtet
...
ScheduleStore in RouterDeps, HandleUpdateSchedule-Handler, Scheduler-Goroutine
in app.Run(), ScreenStore.GetByID hinzugefügt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 07:17:45 +01:00
Jesko Anschütz
9b766f9086
feat(scheduler): Display-Zeitplan-Scheduler Package
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 07:17:40 +01:00
Jesko Anschütz
7e485e505e
feat(store): ScreenScheduleStore mit Get/Upsert/ListEnabled
...
Fügt ScreenSchedule-Typ, ScreenScheduleStore und GetByID-Methode
für ScreenStore hinzu.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 07:17:37 +01:00
Jesko Anschütz
1556c0d002
feat(db): screen_schedules-Tabelle für Zeitplan
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 07:17:34 +01:00
Jesko Anschütz
bdd99d10bd
feat(ui): Display-Buttons und Sammelschalter in Screen-Übersicht
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 07:10:40 +01:00
Jesko Anschütz
68fc0bf4cf
feat(ui): Display-Steuerbox in Playlist-Verwaltung
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 07:10:23 +01:00
Jesko Anschütz
2a312cd61a
feat(manage): DisplayState je Screen in ScreenOverview
2026-03-27 07:05:06 +01:00
Jesko Anschütz
c4f15d862c
feat(manage): DisplayState in ManageUI-Template-Daten
2026-03-27 07:04:54 +01:00
Jesko Anschütz
086f093cb9
feat(store): GetDisplayState für screen_status
2026-03-27 07:02:26 +01:00
Jesko Anschütz
79fcc20b79
fix(display): screen UUID lookup, authScreen middleware, JSON encoding
...
- playerstatus: look up screen by slug before UpsertDisplayState to pass UUID (not slug) and avoid FK violation
- router: switch display command route from authOnly to authScreen for proper permission enforcement
- display.go: remove redundant GetBySlug + requireScreenAccess (now handled by authScreen middleware), drop store dependency
- notifier: replace fmt.Sprintf %q with json.Marshal for correct JSON encoding of display command payload
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 23:35:05 +01:00
Jesko Anschütz
96135266f1
fix(ansible): DPMS aktivieren für Display-Steuerung
2026-03-26 23:31:00 +01:00
Jesko Anschütz
c91e49dc57
feat(agent): displaycontroller in app.go verdrahtet
2026-03-26 23:30:37 +01:00
Jesko Anschütz
a3255a0ced
feat(agent): display_state im Status-Report
2026-03-26 23:23:50 +01:00
Jesko Anschütz
1047572157
feat(agent): mqttsubscriber abonniert Command-Topic
2026-03-26 23:23:23 +01:00
Jesko Anschütz
bcc50635e5
feat(agent): SendDisplayState im MQTT-Publisher + Interface
2026-03-26 23:07:31 +01:00
Jesko Anschütz
4ef16048ad
feat(agent): displaycontroller Package (xset DPMS)
2026-03-26 23:07:14 +01:00
Jesko Anschütz
f985a99ea1
feat(api): display_state im Player-Status-Report persistieren
2026-03-26 23:05:25 +01:00
Jesko Anschütz
fbcda1e2b8
feat(api): POST /api/v1/screens/{slug}/display
2026-03-26 23:05:22 +01:00
Jesko Anschütz
0d51d951a2
feat(mqtt): SendDisplayCommand mit retained QoS 1
2026-03-26 23:05:20 +01:00
Jesko Anschütz
c359757e31
feat(store): UpsertDisplayState für screen_status
2026-03-26 23:05:18 +01:00
Jesko Anschütz
a833220ca6
feat(db): screen_status-Tabelle für Display-Zustand
2026-03-26 23:05:15 +01:00
Jesko Anschütz
01942aa3f3
docs: Implementierungsplan Display-Steuerung Schritt 1 (Command-Pipeline)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 22:59:27 +01:00
Jesko Anschütz
52bc1fbd6f
docs: Design-Spec Display-Steuerung Schritt 1 (Command-Pipeline)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 22:49:05 +01:00
Jesko Anschütz
052cf199ae
fix(manage): HandleReorder gibt 400 bei Mismatch zurück, slog für 500-Fehler
2026-03-26 22:29:48 +01:00
Jesko Anschütz
4fab5fe28a
fix(manage): HandleReorderUI gibt 400 bei Mismatch zurück
2026-03-26 22:27:07 +01:00
Jesko Anschütz
1c11aa9877
fix(store): Reorder validiert Vollständigkeit und RowsAffected
2026-03-26 22:25:47 +01:00
Jesko Anschütz
b463aeeae1
docs: Implementierungsplan für Reorder-Validierung
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 22:20:15 +01:00
Jesko Anschütz
30325dc1b6
docs: Design-Spec für Reorder-Validierung im PlaylistStore
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 22:18:19 +01:00
Jesko Anschütz
37a56903f2
Set Chromium to allow third-party cookies
2026-03-26 18:48:05 +01:00
Jesko Anschütz
ba08220ec5
fix(player): resize-Event nach iframe-Einblenden feuern
...
JS-lastige Seiten (z.B. WebUntis) führen Layout-Berechnungen aus
während der iframe noch display:none hat (offsetWidth=0). Ein
resize-Event nach der Opacity-Transition triggert einen Neu-Layout.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 13:04:44 +01:00
Jesko Anschütz
8025946ab7
fix: orientationLabel in Tenant-Template registrieren + mosquitto-Abhängigkeit entfernen
...
- Template-Funktion `orientationLabel` in tenant/tenant.go ergänzt (fehlte nach UI-Refactoring)
- `depends_on: mosquitto` aus compose/server-stack.yml entfernt (Service ist auskommentiert)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 09:47:11 +01:00
Alwin
e077473bf0
feat(ui): Tenant-Dashboard neu gestaltet
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 08:30:07 +00:00
Alwin
8bf142b5b1
feat(ui): Screen-Übersicht neu gestaltet
2026-03-25 08:27:18 +00:00
Alwin
0aedf61569
feat(ui): Playlist-Editor neu gestaltet (Karten, Inline-Edit, Zwei-Spalten)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 08:23:38 +00:00
Alwin
a691186d9a
feat(ui): Admin-Dashboard neu gestaltet (Karten-Grid, Tabs, Modals)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 07:54:42 +00:00
Alwin
41e12d1235
feat(ui): Provision-Wizard neu gestaltet
2026-03-25 07:44:48 +00:00
Alwin
10a495c13c
feat(ui): Login-Seite neu gestaltet
2026-03-25 07:40:28 +00:00
Alwin
e1506d5d2c
fix(manage): HandleUpdateItemUI returns 204 for fetch callers
2026-03-25 07:32:18 +00:00
Alwin
135bbd875f
chore: .worktrees/ zu .gitignore hinzufügen
2026-03-25 06:41:03 +00:00
Alwin
f435c8aeaf
docs: Frontend-Overhaul-Implementierungsplan hinzugefügt
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 23:08:34 +00:00
Alwin
de268af814
docs: Spec-Review-Korrekturen in Frontend-Overhaul-Design
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 22:38:34 +00:00
Alwin
3bdddf69c6
docs: Frontend-Overhaul-Design-Spec hinzugefügt
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 22:35:56 +00:00
Jesko Anschütz
15fe9580f7
feat(ansible): info11-dev und info12-dev auf infoscreen.morz.de zeigen
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 22:35:31 +01:00
Jesko Anschütz
55ffb26fa9
fix(deploy): mqtt-Service entfernt, db_data als Bind Mount
...
- mqtt-Service entfernt (externer Broker: dockerbox.morz.de)
- mosquitto/-Verzeichnis gelöscht
- db_data named volume → ./data/db als Bind Mount
- .env.example: MQTT-Broker auf dockerbox.morz.de gesetzt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 22:22:33 +01:00
Jesko Anschütz
323d692f59
fix(deploy): DATABASE_URL aus POSTGRES_PASSWORD zusammenbauen
...
Kein doppeltes Passwort mehr in .env nötig.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 22:13:53 +01:00
Jesko Anschütz
600cc10d30
fix(deploy): .env per env_file explizit laden statt Variable-Substitution
...
Verhindert, dass Variablen leer bleiben wenn docker compose nicht aus dem
deploy/-Verzeichnis heraus aufgerufen wird.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 22:12:53 +01:00
Jesko Anschütz
b3fd512d25
feat(deploy): manuelles Deploy-Verzeichnis für dockerbox.morz.de
...
- deploy/docker-compose.yml: Produktions-Stack (Backend, Postgres, Mosquitto)
Backend bindet nur auf 127.0.0.1:8080 (HTTPS via Reverse Proxy)
- deploy/.env.example: Vorlage für Produktions-Umgebungsvariablen
- deploy/mosquitto/config/mosquitto.conf: Mosquitto mit Passwort-Auth
- ansible/group_vars: morz_server_base_url auf https://dockerbox.morz.de
- ansible/inventory.yml: debi entfernt, dev-Hosts info11/info12 ergänzt
- .gitignore: !.env.example als Ausnahme ergänzt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 17:36:39 +01:00
Jesko Anschütz
17ad69a82b
security-fix: port must not be accessible from outside
2026-03-24 17:18:04 +01:00
Jesko Anschütz
5d232b34cd
docs: Ansible-Playbook-Schritte und X11-Abhängigkeiten dokumentieren
...
Screenshot-Tools (scrot, imagemagick, x11-apps) und DISPLAY/XAUTHORITY
im systemd-Service in DEVELOPMENT.md ergänzt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 16:58:11 +01:00