feat: 世界杯48强夺冠盘、管理端调赔与项目文档

- 固定48强基准数据、同步种子与后台世界杯夺冠页

- 补全 user_preferences 迁移文件;新增启动指南与默认数据说明

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-03 16:19:36 +08:00
parent 3b739982a1
commit 95abbcb470
17 changed files with 1157 additions and 92 deletions

178
docs/默认数据说明.md Normal file
View File

@@ -0,0 +1,178 @@
# 默认数据说明
执行 `pnpm db:migrate` 后数据库仅有**表结构**;执行 **`pnpm db:seed`** 后会写入下文演示数据。
种子脚本位置:`apps/api/prisma/seed.ts`
> **注意**:以下为开发演示用途。生产环境务必修改密码、`JWT_SECRET`,勿直接使用默认账号。
---
## migrate 与 seed 的区别
| 命令 | 作用 |
|------|------|
| `pnpm db:migrate` | 按 Prisma 迁移**建表 / 改表**(用户、赛事、盘口、注单等) |
| `pnpm db:seed` | 在已有表结构中**写入演示账号、赛事、赔率、内容等** |
推荐顺序:先 `db:migrate`,再 `db:seed`
种子多为 **upsert**重复执行一般不会重复创建用户但会补全赛事、48 强夺冠盘等。
---
## 一、默认账号
| 用户名 | 密码 | 角色 | 说明 |
|--------|------|------|------|
| `admin` | `Admin@123` | 平台管理员 | 绑定 `SUPER_ADMIN` 角色 |
| `agent1` | `Agent@123` | 一级代理 | 授信额度 **100,000** |
| `agent2` | `Agent@123` | 二级代理 | 上级为 agent1授信 **30,000** |
| `player1` | `Player@123` | 玩家 | 挂靠 agent1 |
| 入口 | 地址 |
|------|------|
| 管理后台admin / agent1 / agent2 | http://localhost:5174 |
| 玩家前台player1 | http://localhost:5173 |
| 接口 | 路径 |
|------|------|
| 管理端登录 | `POST /api/manage/auth/login` |
| 玩家端登录 | `POST /api/player/auth/login` |
---
## 二、默认环境与端口
| 项 | 默认值 |
|----|--------|
| API | http://localhost:3000 ,全局前缀 `/api` |
| Swagger | http://localhost:3000/api/docs |
| 管理后台 | http://localhost:5174 |
| 玩家前台 | http://localhost:5173 |
| Docker PostgreSQL | 用户/密码/库:`thebet365` @ `localhost:5432` |
| Docker Redis | `localhost:6379`(当前 API 逻辑以 Postgres 为主) |
`apps/api/.env` 模板见根目录 `.env.example`,主要项:
| 变量 | 示例 | 说明 |
|------|------|------|
| `DATABASE_URL` | `postgresql://thebet365:thebet365@localhost:5432/thebet365` | 数据库连接 |
| `JWT_SECRET` | 长随机串 | **生产必须修改** |
| `JWT_PLAYER_EXPIRES` | `24h` | 玩家 Token |
| `JWT_ADMIN_EXPIRES` | `2h` | 管理员 Token |
| `JWT_AGENT_EXPIRES` | `8h` | 代理 Token |
| `PORT` | `3000` | API 端口 |
| `UPLOAD_DIR` | 空 | 默认 `apps/api/uploads` |
---
## 三、默认赛事与盘口
### 联赛
| 代码 | 名称 |
|------|------|
| `EPL` | 英超 / Premier League |
| `WC2026` | 2026 世界杯(加拿大、墨西哥、美国) |
### 已发布场次(约 9 场)
- **英超 2 场**:如曼联 vs 切尔西(开球时间为相对当前的演示时间)
- **世界杯 7 场**:如墨西哥-南非、美国-巴拉圭、法国-阿根廷等2026-06 固定日期)
每场在尚无盘口时会自动创建演示玩法,包括但不限于:
- 全场 / 半场:独赢、让球、大小、单双
- 全场 / 半场 / 下半场:波胆(多档比分选项)
赔率均为种子脚本中的**示例数值**,可在管理后台赛事相关流程中调整(非冠军盘)。
### 世界杯 48 强夺冠盘
| 项 | 说明 |
|----|------|
| 数据来源 | `apps/api/src/domains/catalog/wc2026-outright-teams.ts` |
| 队伍数 | **48** 支,含排名与中英文名 |
| 默认赔率 | 如法国 4.95、英格兰 6.3、苏格兰 2500 等 |
| 玩家端 | 足球页 → **「优胜冠军」** |
| 管理端 | 菜单 **「世界杯夺冠」** → 可改赔率 |
| 恢复基准 | 点击 **「应用表格基准数据」** 与代码表对齐 |
`pnpm db:seed` 会以 `forceCanonical: true` 同步 48 强;已有选项的赔率仅在「应用基准」或重新 seed 时按文件覆盖。
---
## 四、玩家演示数据player1
| 项 | 默认值 |
|----|--------|
| 可用余额 | **88,888.88** |
| 账变流水 | 2 笔演示充值(`DEMO-DEP-001` / `DEMO-DEP-002` |
| 语言偏好 | `zh-CN` |
| 示例注单 | `DEMO-BET-001`:待结算单关;`DEMO-BET-002`:已赢且已结算单关 |
---
## 五、运营内容(玩家首页)
| 类型 | 数量 | 说明 |
|------|------|------|
| Banner | 3 | 欢迎投注、首存礼遇、热门赛事 |
| 走马灯TICKER | 1 | 欢迎语 + 理性投注提示 |
| 公告NOTICE | 1 | 每周一 04:0005:00 维护通知 |
图片路径示例:`/uploads/banners/welcome.svg` 等。
重复执行 seed 时,已存在的同类内容可能因 `catch` 跳过,不会无限重复插入。
---
## 六、权限与库内多语言
### 角色与权限
- 角色:`SUPER_ADMIN`(超级管理员)
- 权限示例:`users.create``users.view``agents.create``agents.view``wallet.deposit``wallet.withdraw``matches.manage``settlement.confirm``cashback.confirm``content.manage``reports.view`
### i18n_messages 表
种子仅写入少量玩家端 key中 / 英 / 马来),例如 `nav.home``bet.place_bet`
**管理后台与玩家端大部分文案在代码内**`admin-messages``player` 内 vue-i18n不全部存数据库。
---
## 七、管理后台默认行为
| 项 | 默认 |
|----|------|
| 界面语言 | 中文 `zh-CN``localStorage``admin_locale` |
| 可选语言 | 中文、English、Bahasa Melayu |
| 登录页 | 若开启「快速登录(调试)」可一键 admin / agent |
---
## 八、如何查看 / 重置
```bash
# 可视化浏览所有表
pnpm db:studio
# 重新写入种子(不删表,多为 upsert
pnpm db:seed
```
仅想恢复 **48 强夺冠赔率** 为代码基准:管理后台 → **世界杯夺冠****应用表格基准数据**
清空数据库后重来:
```bash
docker compose down -v # 会删除 Docker 数据卷,慎用
docker compose up -d
pnpm db:migrate
pnpm db:seed
```
---
## 相关文档
- [项目启动指南.md](./项目启动指南.md) — 安装、启动、排错
- [README.md](../README.md) — 项目概览