chore: add PocketBase migrations and fix plan document

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
congsh
2026-04-17 19:35:15 +08:00
parent 4dd15dceab
commit 7e2506b4f2
6 changed files with 1512 additions and 0 deletions
@@ -0,0 +1,99 @@
/// <reference path="../pb_data/types.d.ts" />
migrate((db) => {
const collection = new Collection({
"id": "x5adjlc0txf16r8",
"created": "2026-04-17 10:26:43.079Z",
"updated": "2026-04-17 10:26:43.079Z",
"name": "games",
"type": "base",
"system": false,
"schema": [
{
"system": false,
"id": "name_field",
"name": "name",
"type": "text",
"required": true,
"presentable": false,
"unique": false,
"options": {
"min": null,
"max": 100,
"pattern": ""
}
},
{
"system": false,
"id": "platform_field",
"name": "platform",
"type": "select",
"required": false,
"presentable": false,
"unique": false,
"options": {
"maxSelect": 1,
"values": [
"PC",
"PS5",
"Xbox",
"Switch",
"Mobile"
]
}
},
{
"system": false,
"id": "tags_field",
"name": "tags",
"type": "json",
"required": false,
"presentable": false,
"unique": false,
"options": {
"maxSize": 5000
}
},
{
"system": false,
"id": "cover_field",
"name": "cover",
"type": "url",
"required": false,
"presentable": false,
"unique": false,
"options": {
"exceptDomains": null,
"onlyDomains": null
}
},
{
"system": false,
"id": "popular_field",
"name": "popularCount",
"type": "number",
"required": false,
"presentable": false,
"unique": false,
"options": {
"min": null,
"max": null,
"noDecimal": true
}
}
],
"indexes": [],
"listRule": "@request.auth.id != \"\"",
"viewRule": "@request.auth.id != \"\"",
"createRule": null,
"updateRule": null,
"deleteRule": null,
"options": {}
});
return Dao(db).saveCollection(collection);
}, (db) => {
const dao = new Dao(db);
const collection = dao.findCollectionByNameOrId("x5adjlc0txf16r8");
return dao.deleteCollection(collection);
})
@@ -0,0 +1,101 @@
/// <reference path="../pb_data/types.d.ts" />
migrate((db) => {
const collection = new Collection({
"id": "es63bkyiblpnxdf",
"created": "2026-04-17 10:27:25.626Z",
"updated": "2026-04-17 10:27:25.626Z",
"name": "groups",
"type": "base",
"system": false,
"schema": [
{
"system": false,
"id": "sf_name",
"name": "name",
"type": "text",
"required": true,
"presentable": false,
"unique": false,
"options": {
"min": null,
"max": 50,
"pattern": ""
}
},
{
"system": false,
"id": "sf_desc",
"name": "description",
"type": "text",
"required": false,
"presentable": false,
"unique": false,
"options": {
"min": null,
"max": 500,
"pattern": ""
}
},
{
"system": false,
"id": "sf_owner",
"name": "owner",
"type": "relation",
"required": true,
"presentable": false,
"unique": false,
"options": {
"collectionId": "_pb_users_auth_",
"cascadeDelete": true,
"minSelect": null,
"maxSelect": 1,
"displayFields": null
}
},
{
"system": false,
"id": "sf_members",
"name": "members",
"type": "relation",
"required": false,
"presentable": false,
"unique": false,
"options": {
"collectionId": "_pb_users_auth_",
"cascadeDelete": false,
"minSelect": null,
"maxSelect": null,
"displayFields": null
}
},
{
"system": false,
"id": "sf_max",
"name": "maxMembers",
"type": "number",
"required": true,
"presentable": false,
"unique": false,
"options": {
"min": 2,
"max": 100,
"noDecimal": true
}
}
],
"indexes": [],
"listRule": "owner = @request.auth.id || members.id = @request.auth.id",
"viewRule": "owner = @request.auth.id || members.id = @request.auth.id",
"createRule": "@request.auth.id != \"\"",
"updateRule": "owner = @request.auth.id",
"deleteRule": "owner = @request.auth.id",
"options": {}
});
return Dao(db).saveCollection(collection);
}, (db) => {
const dao = new Dao(db);
const collection = dao.findCollectionByNameOrId("es63bkyiblpnxdf");
return dao.deleteCollection(collection);
})
@@ -0,0 +1,118 @@
/// <reference path="../pb_data/types.d.ts" />
migrate((db) => {
const collection = new Collection({
"id": "sac8t6o9rspld8p",
"created": "2026-04-17 10:27:44.146Z",
"updated": "2026-04-17 10:27:44.146Z",
"name": "team_sessions",
"type": "base",
"system": false,
"schema": [
{
"system": false,
"id": "sf_name",
"name": "name",
"type": "text",
"required": true,
"presentable": false,
"unique": false,
"options": {
"min": null,
"max": 100,
"pattern": ""
}
},
{
"system": false,
"id": "sf_group",
"name": "sourceGroup",
"type": "relation",
"required": true,
"presentable": false,
"unique": false,
"options": {
"collectionId": "es63bkyiblpnxdf",
"cascadeDelete": true,
"minSelect": null,
"maxSelect": 1,
"displayFields": null
}
},
{
"system": false,
"id": "sf_game",
"name": "gameName",
"type": "text",
"required": true,
"presentable": false,
"unique": false,
"options": {
"min": null,
"max": 100,
"pattern": ""
}
},
{
"system": false,
"id": "sf_members",
"name": "members",
"type": "relation",
"required": false,
"presentable": false,
"unique": false,
"options": {
"collectionId": "_pb_users_auth_",
"cascadeDelete": false,
"minSelect": null,
"maxSelect": null,
"displayFields": null
}
},
{
"system": false,
"id": "sf_status",
"name": "status",
"type": "select",
"required": false,
"presentable": false,
"unique": false,
"options": {
"maxSelect": 1,
"values": [
"recruiting",
"playing",
"finished",
"dissolved"
]
}
},
{
"system": false,
"id": "sf_dissolved",
"name": "dissolvedAt",
"type": "date",
"required": false,
"presentable": false,
"unique": false,
"options": {
"min": "",
"max": ""
}
}
],
"indexes": [],
"listRule": "sourceGroup.owner = @request.auth.id || sourceGroup.members.id = @request.auth.id",
"viewRule": "sourceGroup.owner = @request.auth.id || sourceGroup.members.id = @request.auth.id",
"createRule": "@request.auth.id != \"\"",
"updateRule": "sourceGroup.owner = @request.auth.id",
"deleteRule": "sourceGroup.owner = @request.auth.id",
"options": {}
});
return Dao(db).saveCollection(collection);
}, (db) => {
const dao = new Dao(db);
const collection = dao.findCollectionByNameOrId("sac8t6o9rspld8p");
return dao.deleteCollection(collection);
})
@@ -0,0 +1,119 @@
/// <reference path="../pb_data/types.d.ts" />
migrate((db) => {
const collection = new Collection({
"id": "u7crt7qlso24l77",
"created": "2026-04-17 11:16:13.166Z",
"updated": "2026-04-17 11:16:13.166Z",
"name": "invitations",
"type": "base",
"system": false,
"schema": [
{
"system": false,
"id": "sf_from",
"name": "from",
"type": "relation",
"required": true,
"presentable": false,
"unique": false,
"options": {
"collectionId": "_pb_users_auth_",
"cascadeDelete": false,
"minSelect": null,
"maxSelect": 1,
"displayFields": null
}
},
{
"system": false,
"id": "sf_to",
"name": "to",
"type": "relation",
"required": true,
"presentable": false,
"unique": false,
"options": {
"collectionId": "_pb_users_auth_",
"cascadeDelete": false,
"minSelect": null,
"maxSelect": 1,
"displayFields": null
}
},
{
"system": false,
"id": "sf_session",
"name": "teamSession",
"type": "relation",
"required": true,
"presentable": false,
"unique": false,
"options": {
"collectionId": "sac8t6o9rspld8p",
"cascadeDelete": true,
"minSelect": null,
"maxSelect": 1,
"displayFields": null
}
},
{
"system": false,
"id": "sf_status",
"name": "status",
"type": "select",
"required": false,
"presentable": false,
"unique": false,
"options": {
"maxSelect": 1,
"values": [
"pending",
"accepted",
"rejected"
]
}
},
{
"system": false,
"id": "sf_reason",
"name": "rejectReason",
"type": "text",
"required": false,
"presentable": false,
"unique": false,
"options": {
"min": null,
"max": 500,
"pattern": ""
}
},
{
"system": false,
"id": "sf_responded",
"name": "respondedAt",
"type": "date",
"required": false,
"presentable": false,
"unique": false,
"options": {
"min": "",
"max": ""
}
}
],
"indexes": [],
"listRule": "from = @request.auth.id || to = @request.auth.id",
"viewRule": "from = @request.auth.id || to = @request.auth.id",
"createRule": "@request.auth.id != \"\"",
"updateRule": "to = @request.auth.id",
"deleteRule": "from = @request.auth.id",
"options": {}
});
return Dao(db).saveCollection(collection);
}, (db) => {
const dao = new Dao(db);
const collection = dao.findCollectionByNameOrId("u7crt7qlso24l77");
return dao.deleteCollection(collection);
})
@@ -0,0 +1,194 @@
/// <reference path="../pb_data/types.d.ts" />
migrate((db) => {
const dao = new Dao(db)
const collection = dao.findCollectionByNameOrId("_pb_users_auth_")
// add
collection.schema.addField(new SchemaField({
"system": false,
"id": "sf_status",
"name": "status",
"type": "select",
"required": false,
"presentable": false,
"unique": false,
"options": {
"maxSelect": 1,
"values": [
"idle",
"working",
"in_team",
"away"
]
}
}))
// add
collection.schema.addField(new SchemaField({
"system": false,
"id": "sf_note",
"name": "statusNote",
"type": "text",
"required": false,
"presentable": false,
"unique": false,
"options": {
"min": null,
"max": 200,
"pattern": ""
}
}))
// add
collection.schema.addField(new SchemaField({
"system": false,
"id": "sf_maxgroups",
"name": "maxGroups",
"type": "number",
"required": false,
"presentable": false,
"unique": false,
"options": {
"min": 1,
"max": 20,
"noDecimal": true
}
}))
// add
collection.schema.addField(new SchemaField({
"system": false,
"id": "sf_workdays",
"name": "workdays",
"type": "json",
"required": false,
"presentable": false,
"unique": false,
"options": {
"maxSize": 500
}
}))
// add
collection.schema.addField(new SchemaField({
"system": false,
"id": "sf_workstart",
"name": "workStartTime",
"type": "text",
"required": false,
"presentable": false,
"unique": false,
"options": {
"min": null,
"max": 5,
"pattern": ""
}
}))
// add
collection.schema.addField(new SchemaField({
"system": false,
"id": "sf_nextwork",
"name": "nextWorkTime",
"type": "number",
"required": false,
"presentable": false,
"unique": false,
"options": {
"min": null,
"max": null,
"noDecimal": true
}
}))
// add
collection.schema.addField(new SchemaField({
"system": false,
"id": "sf_points",
"name": "points",
"type": "number",
"required": false,
"presentable": false,
"unique": false,
"options": {
"min": null,
"max": null,
"noDecimal": true
}
}))
// update
collection.schema.addField(new SchemaField({
"system": false,
"id": "users_avatar",
"name": "avatar",
"type": "file",
"required": false,
"presentable": false,
"unique": false,
"options": {
"mimeTypes": [
"image/png",
"image/jpeg",
"image/svg+xml",
"image/gif"
],
"thumbs": null,
"maxSelect": 1,
"maxSize": 5242880,
"protected": false
}
}))
return dao.saveCollection(collection)
}, (db) => {
const dao = new Dao(db)
const collection = dao.findCollectionByNameOrId("_pb_users_auth_")
// remove
collection.schema.removeField("sf_status")
// remove
collection.schema.removeField("sf_note")
// remove
collection.schema.removeField("sf_maxgroups")
// remove
collection.schema.removeField("sf_workdays")
// remove
collection.schema.removeField("sf_workstart")
// remove
collection.schema.removeField("sf_nextwork")
// remove
collection.schema.removeField("sf_points")
// update
collection.schema.addField(new SchemaField({
"system": false,
"id": "users_avatar",
"name": "avatar",
"type": "file",
"required": false,
"presentable": false,
"unique": false,
"options": {
"mimeTypes": [
"image/jpeg",
"image/png",
"image/svg+xml",
"image/gif",
"image/webp"
],
"thumbs": null,
"maxSelect": 1,
"maxSize": 5242880,
"protected": false
}
}))
return dao.saveCollection(collection)
})