Fix: neuigkeiten-Migration auf new Collection()+app.save() umgestellt

importCollections() kompiliert Access-Rules in PocketBase v0.38 nicht
korrekt → HTTP 400 bei jedem List-Request. Alle anderen Migrationen
(nachrichten, mitglieder, etc.) verwenden new Collection() + app.save()
und funktionieren einwandfrei. Gleiche Methode jetzt auch für neuigkeiten
und reaktionen.

Außerdem: Makefile um staging-reset-Target erweitert (löscht PB-Daten),
staging-deploy synchronisiert Migrations und Hooks jetzt vollständig
(nicht nur neue Dateien).
This commit is contained in:
rene 2026-05-21 20:49:11 +02:00
parent ff8e9b2c39
commit 61c430f2e6
2 changed files with 198 additions and 46 deletions

View file

@ -1,46 +1,188 @@
/// <reference path="../pb_data/types.d.ts" />
migrate((app) => {
// Neuigkeiten + Reaktionen via importCollections (korrekte Rule-Compilation in PocketBase v0.38)
app.importCollections([
{
"createRule": "@request.auth.verein_id = verein_id",
"deleteRule": "@request.auth.verein_id = verein_id && autor_id = @request.auth.id",
"listRule": "@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",
"fields": [
{ "type": "relation", "name": "verein_id", "required": true, "cascadeDelete": true, "collectionId": "pbc_3589557411", "maxSelect": 1 },
{ "type": "text", "name": "autor_id", "required": true },
{ "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",
"type": "base"
}
], false)
// neuigkeiten: new Collection() + app.save() genau wie nachrichten/mitglieder.
// importCollections() kompiliert Rules in PB v0.38 NICHT korrekt → HTTP 400.
const neuigkeiten = new Collection({
"id": "pbc_1779230901",
"name": "neuigkeiten",
"type": "base",
"system": false,
"listRule": "@request.auth.verein_id = verein_id",
"viewRule": "@request.auth.verein_id = verein_id",
"createRule": "@request.auth.verein_id = verein_id",
"updateRule": "@request.auth.verein_id = verein_id && autor_id = @request.auth.id",
"deleteRule": "@request.auth.verein_id = verein_id && autor_id = @request.auth.id",
"indexes": [],
"fields": [
{
"autogeneratePattern": "[a-z0-9]{15}",
"hidden": false,
"id": "text3208210256",
"max": 15,
"min": 15,
"name": "id",
"pattern": "^[a-z0-9]+$",
"presentable": false,
"primaryKey": true,
"required": true,
"system": true,
"type": "text"
},
{
"cascadeDelete": true,
"collectionId": "pbc_3589557411",
"hidden": false,
"id": "relation3100049688",
"maxSelect": 1,
"minSelect": 0,
"name": "verein_id",
"presentable": false,
"required": true,
"system": false,
"type": "relation"
},
{
"autogeneratePattern": "",
"hidden": false,
"id": "text2300079512",
"max": 0,
"min": 0,
"name": "autor_id",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": true,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"hidden": false,
"id": "text1546895374",
"max": 0,
"min": 0,
"name": "autor_name",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"hidden": false,
"id": "text1059453555",
"max": 0,
"min": 0,
"name": "text",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": false,
"system": false,
"type": "text"
},
{
"hidden": false,
"id": "file5103562148",
"maxSelect": 10,
"maxSize": 15728640,
"mimeTypes": ["image/jpeg","image/png","image/gif","image/webp","video/mp4","video/quicktime"],
"name": "medien",
"presentable": false,
"required": false,
"system": false,
"type": "file"
},
{
"cascadeDelete": false,
"collectionId": "pbc_3099069179",
"hidden": false,
"id": "relation3177861730",
"maxSelect": 99,
"minSelect": 0,
"name": "gruppe_ids",
"presentable": false,
"required": false,
"system": false,
"type": "relation"
},
{
"cascadeDelete": false,
"collectionId": "pbc_2279568741",
"hidden": false,
"id": "relation2143897900",
"maxSelect": 1,
"minSelect": 0,
"name": "termin_id",
"presentable": false,
"required": false,
"system": false,
"type": "relation"
}
]
});
app.save(neuigkeiten);
const neuigkeitenId = app.findCollectionByNameOrId("neuigkeiten").id
const neuigkeitenId = app.findCollectionByNameOrId("neuigkeiten").id;
app.importCollections([
{
"createRule": "@request.auth.id != ''",
"deleteRule": "@request.auth.id = user_id",
"listRule": "@request.auth.verein_id = beitrag_id.verein_id",
"viewRule": "@request.auth.verein_id = beitrag_id.verein_id",
"updateRule": null,
"fields": [
{ "type": "relation", "name": "beitrag_id", "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)"],
"name": "reaktionen",
"type": "base"
}
], false)
const reaktionen = new Collection({
"id": "pbc_1779230902",
"name": "reaktionen",
"type": "base",
"system": false,
"createRule": "@request.auth.id != ''",
"deleteRule": "@request.auth.id = user_id",
"listRule": "@request.auth.verein_id = beitrag_id.verein_id",
"viewRule": "@request.auth.verein_id = beitrag_id.verein_id",
"updateRule": null,
"indexes": ["CREATE UNIQUE INDEX idx_reaktion_unique ON reaktionen (beitrag_id, user_id)"],
"fields": [
{
"autogeneratePattern": "[a-z0-9]{15}",
"hidden": false,
"id": "text3208210256",
"max": 15,
"min": 15,
"name": "id",
"pattern": "^[a-z0-9]+$",
"presentable": false,
"primaryKey": true,
"required": true,
"system": true,
"type": "text"
},
{
"cascadeDelete": true,
"collectionId": neuigkeitenId,
"hidden": false,
"id": "relation4196188140",
"maxSelect": 1,
"minSelect": 0,
"name": "beitrag_id",
"presentable": false,
"required": true,
"system": false,
"type": "relation"
},
{
"cascadeDelete": true,
"collectionId": "_pb_users_auth_",
"hidden": false,
"id": "relation3255232538",
"maxSelect": 1,
"minSelect": 0,
"name": "user_id",
"presentable": false,
"required": true,
"system": false,
"type": "relation"
}
]
});
app.save(reaktionen);
}, (app) => {
try { app.delete(app.findCollectionByNameOrId("reaktionen")) } catch(_) {}