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
45 lines
1.4 KiB
JavaScript
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)
|
|
})
|