diff --git a/backend/pb_migrations/1776500001_created_polls.js b/backend/pb_migrations/1776500001_created_polls.js
deleted file mode 100644
index 5209fea..0000000
--- a/backend/pb_migrations/1776500001_created_polls.js
+++ /dev/null
@@ -1,151 +0,0 @@
-///
-migrate((db) => {
- const collection = new Collection({
- "id": "polls_collection",
- "created": "2026-04-18 00:00:01.000Z",
- "updated": "2026-04-18 00:00:01.000Z",
- "name": "polls",
- "type": "base",
- "system": false,
- "schema": [
- {
- "system": false,
- "id": "sf_group",
- "name": "group",
- "type": "relation",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "collectionId": "es63bkyiblpnxdf",
- "cascadeDelete": false,
- "minSelect": null,
- "maxSelect": 1,
- "displayFields": null
- }
- },
- {
- "system": false,
- "id": "sf_creator",
- "name": "creator",
- "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_title",
- "name": "title",
- "type": "text",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "min": null,
- "max": 200,
- "pattern": ""
- }
- },
- {
- "system": false,
- "id": "sf_type",
- "name": "type",
- "type": "select",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "minSelect": null,
- "maxSelect": 1,
- "values": ["option", "rollcall"]
- }
- },
- {
- "system": false,
- "id": "sf_anonymous",
- "name": "anonymous",
- "type": "bool",
- "required": false,
- "presentable": false,
- "unique": false,
- "options": {}
- },
- {
- "system": false,
- "id": "sf_deadline",
- "name": "deadline",
- "type": "date",
- "required": false,
- "presentable": false,
- "unique": false,
- "options": {
- "min": "",
- "max": ""
- }
- },
- {
- "system": false,
- "id": "sf_maxp",
- "name": "maxParticipants",
- "type": "number",
- "required": false,
- "presentable": false,
- "unique": false,
- "options": {
- "min": 1,
- "max": null,
- "noDecimal": true
- }
- },
- {
- "system": false,
- "id": "sf_status",
- "name": "status",
- "type": "select",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "minSelect": null,
- "maxSelect": 1,
- "values": ["active", "settled"]
- }
- },
- {
- "system": false,
- "id": "sf_settled",
- "name": "settledAt",
- "type": "date",
- "required": false,
- "presentable": false,
- "unique": false,
- "options": {
- "min": "",
- "max": ""
- }
- }
- ],
- "indexes": [],
- "listRule": "@request.auth.id != \"\" && group.members ~ @request.auth.id",
- "viewRule": "@request.auth.id != \"\" && group.members ~ @request.auth.id",
- "createRule": "@request.auth.id != \"\" && group.members ~ @request.auth.id",
- "updateRule": "creator = @request.auth.id",
- "deleteRule": "creator = @request.auth.id || group.owner = @request.auth.id",
- "options": {}
- });
-
- return Dao(db).saveCollection(collection);
-}, (db) => {
- const dao = new Dao(db);
- const collection = dao.findCollectionByNameOrId("polls_collection");
-
- return dao.deleteCollection(collection);
-})
diff --git a/backend/pb_migrations/1776500002_created_poll_options.js b/backend/pb_migrations/1776500002_created_poll_options.js
deleted file mode 100644
index cc1c0a9..0000000
--- a/backend/pb_migrations/1776500002_created_poll_options.js
+++ /dev/null
@@ -1,71 +0,0 @@
-///
-migrate((db) => {
- const collection = new Collection({
- "id": "poll_options_collection",
- "created": "2026-04-18 00:00:02.000Z",
- "updated": "2026-04-18 00:00:02.000Z",
- "name": "poll_options",
- "type": "base",
- "system": false,
- "schema": [
- {
- "system": false,
- "id": "sf_poll",
- "name": "poll",
- "type": "relation",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "collectionId": "polls_collection",
- "cascadeDelete": true,
- "minSelect": null,
- "maxSelect": 1,
- "displayFields": null
- }
- },
- {
- "system": false,
- "id": "sf_content",
- "name": "content",
- "type": "text",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "min": null,
- "max": 200,
- "pattern": ""
- }
- },
- {
- "system": false,
- "id": "sf_order",
- "name": "order",
- "type": "number",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "min": 0,
- "max": null,
- "noDecimal": true
- }
- }
- ],
- "indexes": [],
- "listRule": "@request.auth.id != \"\"",
- "viewRule": "@request.auth.id != \"\"",
- "createRule": "@request.auth.id != \"\"",
- "updateRule": "poll.creator = @request.auth.id",
- "deleteRule": "poll.creator = @request.auth.id",
- "options": {}
- });
-
- return Dao(db).saveCollection(collection);
-}, (db) => {
- const dao = new Dao(db);
- const collection = dao.findCollectionByNameOrId("poll_options_collection");
-
- return dao.deleteCollection(collection);
-})
diff --git a/backend/pb_migrations/1776500003_created_poll_votes.js b/backend/pb_migrations/1776500003_created_poll_votes.js
deleted file mode 100644
index ef47586..0000000
--- a/backend/pb_migrations/1776500003_created_poll_votes.js
+++ /dev/null
@@ -1,75 +0,0 @@
-///
-migrate((db) => {
- const collection = new Collection({
- "id": "poll_votes_collection",
- "created": "2026-04-18 00:00:03.000Z",
- "updated": "2026-04-18 00:00:03.000Z",
- "name": "poll_votes",
- "type": "base",
- "system": false,
- "schema": [
- {
- "system": false,
- "id": "sf_poll",
- "name": "poll",
- "type": "relation",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "collectionId": "polls_collection",
- "cascadeDelete": true,
- "minSelect": null,
- "maxSelect": 1,
- "displayFields": null
- }
- },
- {
- "system": false,
- "id": "sf_option",
- "name": "option",
- "type": "relation",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "collectionId": "poll_options_collection",
- "cascadeDelete": false,
- "minSelect": null,
- "maxSelect": 1,
- "displayFields": null
- }
- },
- {
- "system": false,
- "id": "sf_user",
- "name": "user",
- "type": "relation",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "collectionId": "_pb_users_auth_",
- "cascadeDelete": true,
- "minSelect": null,
- "maxSelect": 1,
- "displayFields": null
- }
- }
- ],
- "indexes": ["CREATE UNIQUE INDEX idx_poll_user ON poll_votes (poll, user)"],
- "listRule": "@request.auth.id != \"\"",
- "viewRule": "@request.auth.id != \"\"",
- "createRule": "@request.auth.id != \"\" && user = @request.auth.id && poll.group.members ~ @request.auth.id",
- "updateRule": "user = @request.auth.id",
- "deleteRule": "user = @request.auth.id",
- "options": {}
- });
-
- return Dao(db).saveCollection(collection);
-}, (db) => {
- const dao = new Dao(db);
- const collection = dao.findCollectionByNameOrId("poll_votes_collection");
-
- return dao.deleteCollection(collection);
-})
diff --git a/backend/pb_migrations/1776500004_created_memories.js b/backend/pb_migrations/1776500004_created_memories.js
deleted file mode 100644
index 3c32029..0000000
--- a/backend/pb_migrations/1776500004_created_memories.js
+++ /dev/null
@@ -1,128 +0,0 @@
-///
-migrate((db) => {
- const collection = new Collection({
- "id": "memories_collection",
- "created": "2026-04-18 10:00:04.000Z",
- "updated": "2026-04-18 10:00:04.000Z",
- "name": "memories",
- "type": "base",
- "system": false,
- "schema": [
- {
- "system": false,
- "id": "sf_group",
- "name": "group",
- "type": "relation",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "collectionId": "es63bkyiblpnxdf",
- "cascadeDelete": true,
- "minSelect": null,
- "maxSelect": 1,
- "displayFields": null
- }
- },
- {
- "system": false,
- "id": "sf_uploader",
- "name": "uploader",
- "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_title",
- "name": "title",
- "type": "text",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "min": null,
- "max": 200,
- "pattern": ""
- }
- },
- {
- "system": false,
- "id": "sf_desc",
- "name": "description",
- "type": "text",
- "required": false,
- "presentable": false,
- "unique": false,
- "options": {
- "min": null,
- "max": null,
- "pattern": ""
- }
- },
- {
- "system": false,
- "id": "sf_file",
- "name": "file",
- "type": "file",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "maxSelect": 1,
- "maxSize": 524288000,
- "mimeTypes": ["image/*", "video/*", "audio/*", "application/pdf", "application/msword", "application/vnd.*", "text/*", "application/zip", "application/x-rar-compressed"]
- }
- },
- {
- "system": false,
- "id": "sf_ft",
- "name": "fileType",
- "type": "select",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "maxSelect": 1,
- "values": ["image", "video", "audio", "document", "other"]
- }
- },
- {
- "system": false,
- "id": "sf_size",
- "name": "size",
- "type": "number",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "min": 0,
- "max": null,
- "noDecimal": false
- }
- }
- ],
- "indexes": [],
- "listRule": "@request.auth.id != \"\" && group.members ~ @request.auth.id",
- "viewRule": "@request.auth.id != \"\" && group.members ~ @request.auth.id",
- "createRule": "@request.auth.id != \"\" && group.members ~ @request.auth.id",
- "updateRule": "uploader = @request.auth.id",
- "deleteRule": "uploader = @request.auth.id || group.owner = @request.auth.id",
- "options": {}
- });
-
- return Dao(db).saveCollection(collection);
-}, (db) => {
- const dao = new Dao(db);
- const collection = dao.findCollectionByNameOrId("memories_collection");
-
- return dao.deleteCollection(collection);
-})
diff --git a/backend/pb_migrations/1776500005_created_notifications.js b/backend/pb_migrations/1776500005_created_notifications.js
deleted file mode 100644
index 7d8bf6c..0000000
--- a/backend/pb_migrations/1776500005_created_notifications.js
+++ /dev/null
@@ -1,121 +0,0 @@
-///
-migrate((db) => {
- const collection = new Collection({
- "id": "notifications_collection",
- "created": "2026-04-18 10:00:05.000Z",
- "updated": "2026-04-18 10:00:05.000Z",
- "name": "notifications",
- "type": "base",
- "system": false,
- "schema": [
- {
- "system": false,
- "id": "sf_user",
- "name": "user",
- "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_type",
- "name": "type",
- "type": "select",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "maxSelect": 1,
- "values": ["poll_new", "poll_deadline", "poll_result", "team_invite", "team_starting", "join_request", "member_joined"]
- }
- },
- {
- "system": false,
- "id": "sf_title",
- "name": "title",
- "type": "text",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "min": null,
- "max": 200,
- "pattern": ""
- }
- },
- {
- "system": false,
- "id": "sf_content",
- "name": "content",
- "type": "text",
- "required": false,
- "presentable": false,
- "unique": false,
- "options": {
- "min": null,
- "max": null,
- "pattern": ""
- }
- },
- {
- "system": false,
- "id": "sf_read",
- "name": "read",
- "type": "bool",
- "required": false,
- "presentable": false,
- "unique": false,
- "options": {}
- },
- {
- "system": false,
- "id": "sf_rid",
- "name": "relatedId",
- "type": "text",
- "required": false,
- "presentable": false,
- "unique": false,
- "options": {
- "min": null,
- "max": null,
- "pattern": ""
- }
- },
- {
- "system": false,
- "id": "sf_rtype",
- "name": "relatedType",
- "type": "select",
- "required": false,
- "presentable": false,
- "unique": false,
- "options": {
- "maxSelect": 1,
- "values": ["poll", "team", "group"]
- }
- }
- ],
- "indexes": [],
- "listRule": "user = @request.auth.id",
- "viewRule": "user = @request.auth.id",
- "createRule": "@request.auth.id != \"\"",
- "updateRule": "user = @request.auth.id",
- "deleteRule": "user = @request.auth.id",
- "options": {}
- });
-
- return Dao(db).saveCollection(collection);
-}, (db) => {
- const dao = new Dao(db);
- const collection = dao.findCollectionByNameOrId("notifications_collection");
-
- return dao.deleteCollection(collection);
-})
diff --git a/backend/pb_migrations/1776500006_created_point_logs.js b/backend/pb_migrations/1776500006_created_point_logs.js
deleted file mode 100644
index d1b1348..0000000
--- a/backend/pb_migrations/1776500006_created_point_logs.js
+++ /dev/null
@@ -1,84 +0,0 @@
-///
-migrate((db) => {
- const collection = new Collection({
- "id": "point_logs_collection",
- "created": "2026-04-18 10:00:06.000Z",
- "updated": "2026-04-18 10:00:06.000Z",
- "name": "point_logs",
- "type": "base",
- "system": false,
- "schema": [
- {
- "system": false,
- "id": "sf_user",
- "name": "user",
- "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_action",
- "name": "action",
- "type": "select",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "maxSelect": 1,
- "values": ["vote", "team", "memory"]
- }
- },
- {
- "system": false,
- "id": "sf_points",
- "name": "points",
- "type": "number",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "min": 1,
- "max": null,
- "noDecimal": false
- }
- },
- {
- "system": false,
- "id": "sf_rid",
- "name": "relatedId",
- "type": "text",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "min": null,
- "max": null,
- "pattern": ""
- }
- }
- ],
- "indexes": [],
- "listRule": "user = @request.auth.id",
- "viewRule": "user = @request.auth.id",
- "createRule": "@request.auth.id != \"\" && user = @request.auth.id",
- "updateRule": null,
- "deleteRule": null,
- "options": {}
- });
-
- return Dao(db).saveCollection(collection);
-}, (db) => {
- const dao = new Dao(db);
- const collection = dao.findCollectionByNameOrId("point_logs_collection");
-
- return dao.deleteCollection(collection);
-})
diff --git a/frontend/nginx.conf b/frontend/nginx.conf
index 912c294..a5bc3fc 100644
--- a/frontend/nginx.conf
+++ b/frontend/nginx.conf
@@ -17,7 +17,7 @@ server {
# SSE realtime 连接(必须在 /api/ 之前)
location /api/realtime {
- proxy_pass http://192.168.1.14:8090;
+ proxy_pass http://gamegroup-pb:8090;
proxy_http_version 1.1;
proxy_set_header Connection '';
proxy_set_header Host $host;
@@ -33,7 +33,7 @@ server {
# API 代理到局域网 PocketBase
location /api/ {
client_max_body_size 500m;
- proxy_pass http://192.168.1.14:8090;
+ proxy_pass http://gamegroup-pb:8090;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';