stammtisch-hersbruck/backend/pb_migrations/1754500600_events_dates_instead_of_status.js
Daniel Michelberger 1cd708e0ff feat(schema): Fahrerkonten, Event-Daten und Herkunft des Trail-Status
Drei Migrationen, dazu der Snapshot in 1754400000_init_schema.js, aus dem
die TypeScript-Typen erzeugt werden - beide muessen zusammenpassen, sonst
laufen Schema und Typen auseinander.

riders.user verknuepft einen Fahrer mit einem Login, ohne cascadeDelete:
Ein geloeschtes Konto darf keine Zeiten mitreissen. Anlegen, Aendern und
Loeschen von Fahrern wird zur Sache der Teamleitung; bisher durfte das
jedes Teammitglied.

users.viewRule von "nur ich selbst" auf "eingeloggt" - ohne das laesst sich
zu einer bekannten ID kein Name anzeigen, was Mitgliederliste,
Fahrerkonten und den Melder eines Trail-Markers betrifft. Die listRule
bleibt eng, E-Mails bleiben ueber emailVisibility verborgen. users.createRule
erlaubt eingeloggten Nutzern das Anlegen von Konten, nicht der ganzen Welt.

events verliert status und bekommt starts/ends. Der Status war Handarbeit:
Wer vergass, ein Event abzuschliessen, hatte eine falsche Uebersicht. Ein
Datum weiss von selbst, was ansteht, laeuft und vorbei ist. ACHTUNG: Die
Migration entfernt das Feld samt seiner Werte.

trails bekommt status_changed und status_by. Einer Sperrung soll man
ansehen, ob sie von heute Morgen oder vom letzten Herbst ist.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014dh9W1i7aLSdPYJzQPid5o
2026-09-02 12:55:47 +02:00

52 lines
1.5 KiB
JavaScript

/// <reference path="../pb_data/types.d.ts" />
// Events werden datiert statt bewertet.
//
// Der Status (draft/active/finished) war Handarbeit: Jemand musste ein Event
// aktiv schalten und hinterher wieder abschließen, sonst stand die Übersicht
// falsch da. Ein Datum weiß von selbst, was ansteht, was läuft und was vorbei
// ist.
//
// starts trägt den Tag; ends bleibt leer, wenn das Event nur einen Tag dauert,
// und trägt sonst den letzten Tag. Beide sind optional, damit bestehende
// Events ohne Datum weiterleben, bis jemand eines nachträgt.
migrate((app) => {
const events = app.findCollectionByNameOrId('events')
// Auf einer frischen Datenbank hat der Snapshot die Felder bereits.
if (!events.fields.getByName('starts')) {
events.fields.add(new Field({
id: 'date_event_starts',
name: 'starts',
type: 'date',
}))
}
if (!events.fields.getByName('ends')) {
events.fields.add(new Field({
id: 'date_event_ends',
name: 'ends',
type: 'date',
}))
}
if (events.fields.getByName('status')) {
events.fields.removeByName('status')
}
app.save(events)
}, (app) => {
const events = app.findCollectionByNameOrId('events')
events.fields.removeByName('starts')
events.fields.removeByName('ends')
events.fields.add(new Field({
id: 'select_event_status',
name: 'status',
type: 'select',
maxSelect: 1,
values: ['draft', 'active', 'finished'],
}))
app.save(events)
})