stammtisch-hersbruck/backend/pb_migrations/1754500700_trail_status_meta.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

45 lines
1.4 KiB
JavaScript

/// <reference path="../pb_data/types.d.ts" />
// Wer hat den Trail gesperrt, und wann?
//
// Der Status allein sagt nur, wie es gerade steht. Für eine Meldung, der man
// trauen soll, gehört dazu, wann sie kam und von wem — eine Sperrung von
// heute Morgen wiegt anders als eine vom letzten Herbst.
//
// Beide Felder schreibt die Anwendung beim Setzen des Status mit; bestehende
// Trails bleiben ohne Angabe, bis der Status das nächste Mal geändert wird.
migrate((app) => {
const trails = app.findCollectionByNameOrId('trails')
const users = app.findCollectionByNameOrId('users')
if (!trails.fields.getByName('status_changed')) {
trails.fields.add(new Field({
id: 'date_trail_status_changed',
name: 'status_changed',
type: 'date',
}))
}
if (!trails.fields.getByName('status_by')) {
trails.fields.add(new Field({
id: 'relation_trail_status_by',
name: 'status_by',
type: 'relation',
collectionId: users.id,
cascadeDelete: false,
maxSelect: 1,
minSelect: 0,
required: false,
}))
}
app.save(trails)
}, (app) => {
const trails = app.findCollectionByNameOrId('trails')
trails.fields.removeByName('status_changed')
trails.fields.removeByName('status_by')
app.save(trails)
})