Fix: importCollections() statt app.save() für korrekte Rule-Compilation in PB v0.38

This commit is contained in:
rene 2026-05-21 20:30:14 +02:00
parent 9898581ae4
commit caff0feae8

View file

@ -1,81 +1,46 @@
/// <reference path="../pb_data/types.d.ts" /> /// <reference path="../pb_data/types.d.ts" />
migrate((app) => { migrate((app) => {
// neuigkeiten Vereins-Feed mit Medien // Neuigkeiten + Reaktionen via importCollections (korrekte Rule-Compilation in PocketBase v0.38)
{ app.importCollections([
const c = new Collection({ {
"createRule": "@request.auth.verein_id = verein_id", "createRule": "@request.auth.verein_id = verein_id",
"deleteRule": "@request.auth.verein_id = verein_id && autor_id = @request.auth.id", "deleteRule": "@request.auth.verein_id = verein_id && autor_id = @request.auth.id",
"listRule": "@request.auth.verein_id = verein_id", "listRule": "@request.auth.verein_id = verein_id",
"viewRule": "@request.auth.verein_id = verein_id", "viewRule": "@request.auth.verein_id = verein_id",
"updateRule": "@request.auth.verein_id = verein_id && autor_id = @request.auth.id", "updateRule": "@request.auth.verein_id = verein_id && autor_id = @request.auth.id",
"fields": [ "fields": [
{ { "type": "relation", "name": "verein_id", "required": true, "cascadeDelete": true, "collectionId": "pbc_3589557411", "maxSelect": 1 },
"type": "relation", "name": "verein_id", { "type": "relation", "name": "autor_id", "required": true, "cascadeDelete": false, "collectionId": "_pb_users_auth_", "maxSelect": 1 },
"required": true, "cascadeDelete": true, { "type": "text", "name": "autor_name" },
"collectionId": "pbc_3589557411", "maxSelect": 1 { "type": "text", "name": "text" },
}, { "type": "file", "name": "medien", "maxSelect": 10, "maxSize": 15728640, "mimeTypes": ["image/jpeg","image/png","image/gif","image/webp","video/mp4","video/quicktime"] },
{ { "type": "relation", "name": "gruppe_ids", "cascadeDelete": false, "collectionId": "pbc_3099069179", "maxSelect": 99 },
"type": "relation", "name": "autor_id", { "type": "relation", "name": "termin_id", "cascadeDelete": false, "collectionId": "pbc_2279568741", "maxSelect": 1 }
"required": true, "cascadeDelete": false,
"collectionId": "_pb_users_auth_", "maxSelect": 1
},
{ "type": "text", "name": "autor_name" },
{ "type": "text", "name": "text" },
{
"type": "file", "name": "medien",
"maxSelect": 10, "maxSize": 15728640,
"mimeTypes": ["image/jpeg","image/png","image/gif","image/webp","video/mp4","video/quicktime"]
},
{
"type": "relation", "name": "gruppe_ids",
"cascadeDelete": false,
"collectionId": "pbc_3099069179", "maxSelect": 99
},
{
"type": "relation", "name": "termin_id",
"cascadeDelete": false,
"collectionId": "pbc_2279568741", "maxSelect": 1
}
], ],
"name": "neuigkeiten", "name": "neuigkeiten",
"system": false,
"type": "base" "type": "base"
}) }
app.save(c) ], false)
// Re-save erzwingt Rule-Recompilation in PocketBase v0.38
const n2 = app.findCollectionByNameOrId("neuigkeiten")
app.save(n2)
}
// reaktionen 👍 pro User pro Beitrag const neuigkeitenId = app.findCollectionByNameOrId("neuigkeiten").id
{
const neuigkeitenId = app.findCollectionByNameOrId("neuigkeiten").id app.importCollections([
const c = new Collection({ {
"createRule": "@request.auth.id != ''", "createRule": "@request.auth.id != ''",
"deleteRule": "@request.auth.id = user_id", "deleteRule": "@request.auth.id = user_id",
"listRule": "@request.auth.verein_id = beitrag_id.verein_id", "listRule": "@request.auth.verein_id = beitrag_id.verein_id",
"viewRule": "@request.auth.verein_id = beitrag_id.verein_id", "viewRule": "@request.auth.verein_id = beitrag_id.verein_id",
"updateRule": null, "updateRule": null,
"fields": [ "fields": [
{ { "type": "relation", "name": "beitrag_id", "required": true, "cascadeDelete": true, "collectionId": neuigkeitenId, "maxSelect": 1 },
"type": "relation", "name": "beitrag_id", { "type": "relation", "name": "user_id", "required": true, "cascadeDelete": true, "collectionId": "_pb_users_auth_", "maxSelect": 1 }
"required": true, "cascadeDelete": true,
"collectionId": neuigkeitenId, "maxSelect": 1
},
{
"type": "relation", "name": "user_id",
"required": true, "cascadeDelete": true,
"collectionId": "_pb_users_auth_", "maxSelect": 1
}
], ],
"indexes": ["CREATE UNIQUE INDEX idx_reaktion_unique ON reaktionen (beitrag_id, user_id)"], "indexes": ["CREATE UNIQUE INDEX idx_reaktion_unique ON reaktionen (beitrag_id, user_id)"],
"name": "reaktionen", "name": "reaktionen",
"system": false,
"type": "base" "type": "base"
}) }
app.save(c) ], false)
}
}, (app) => { }, (app) => {
try { app.delete(app.findCollectionByNameOrId("reaktionen")) } catch(_) {} try { app.delete(app.findCollectionByNameOrId("reaktionen")) } catch(_) {}