Files
thebet365/docs/默认数据说明.md
2026-06-13 17:38:25 +08:00

203 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 默认数据说明
执行 `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` | 一级代理 | 仅 dev seed 写入,授信额度 **100,000** |
| `agent2` | `Agent@123` | 二级代理 | 仅 dev seed 写入,上级为 agent1授信 **30,000** |
| `player1` | `Player@123` | 玩家 | 仅 dev seed 写入,挂靠 agent1 |
生产模式 seed 只写入 `admin` 和赛事目录数据,不写入代理、玩家、充值流水或注单。
| 入口 | 地址 |
|------|------|
| 管理后台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` |
---
## 三、默认赛事与盘口
### 联赛
| 代码 | 名称 |
|------|------|
| `WC2026` | 2026 世界杯(加拿大、墨西哥、美国) |
### 已发布场次
- **世界杯小组赛 72 场**:含 2026-06 固定日期、场馆、分组、球队中英文名。
- 球队图片使用公开 FlagCDN 国旗 URL例如 `https://flagcdn.com/fr.svg`;不再使用旧的赛事图片源。
- 默认赛事全部为非热门赛事,玩家首页不会因为 seed 数据自动出现热门赛事。
每场在尚无盘口时会自动创建演示玩法,包括但不限于:
- 全场 / 半场:独赢、让球、大小、单双
- 全场:波胆(多档比分选项)
默认足球盘口模板与赛事 seed **不创建** `HT_CORRECT_SCORE`(上半场波胆)和 `SH_CORRECT_SCORE`(下半场波胆)。这两个盘口类型仍保留在系统识别能力中,便于兼容历史数据或后续手动扩展。
赔率均为种子脚本中的**示例数值**,可在管理后台赛事相关流程中调整(非冠军盘)。
### 世界杯 48 强夺冠盘
| 项 | 说明 |
|----|------|
| 数据来源 | `apps/api/src/domains/catalog/wc2026-outright-teams.ts` |
| 队伍数 | **48** 支,含排名与中英文名 |
| 默认赔率 | 如法国 4.95、英格兰 6.3、苏格兰 2500 等 |
| 玩家端 | 投注页 `/bet`**「优胜冠军」**:按后台已发布赛事折叠展示,多赛事可分别展开;选项过多时点击 **加载更多**(须玩家账号) |
| 管理端 | 菜单 **「优胜冠军」** → 选择赛事 → 可增删队伍、改赔率;世界杯可 **导入 48 强基准** |
| 恢复基准 | **优胜冠军** 页点击 **「导入世界杯 48 强」** 与代码表对齐 |
`pnpm db:seed` 会以 `forceCanonical: true` 同步 48 强;已有选项的赔率仅在「应用基准」或重新 seed 时按文件覆盖。
---
## 四、玩家演示数据player1
| 项 | 默认值 |
|----|--------|
| 可用余额 | **88,888.88** |
| 账变流水 | 2 笔演示充值(`DEMO-DEP-001` / `DEMO-DEP-002` |
| 语言偏好 | `zh-CN` |
| 示例注单 | 默认不写入演示注单 |
---
## 五、运营内容(玩家首页)
| 类型 | 数量 | 说明 |
|------|------|------|
| 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 |
---
## 八、玩家端看不到「优胜冠军」时
1. 使用 **玩家账号** 登录(`player1` / `Player@123`),代理或管理员账号无法访问 `GET /player/outrights`
2. 确认 API 已启动:`pnpm dev:api`
3. 确认已种子:`pnpm db:seed`(或管理端 **优胜冠军 → 导入世界杯 48 强**)。
4. 进入 **投注** 页,点顶部 **优胜冠军**(不是「赛事」标签)。
5. 浏览器 F12 → Network`/api/player/outrights` 是否 200 且 `data` 数组非空。
**后台有数据、玩家端没有**:多为玩家接口原先只查 `OPEN` 盘口,与后台查询不一致;现已改为与管理端「优胜冠军」页共用 `OutrightService` 数据源。修改后需 **重启 API**
---
## 九、如何查看 / 重置
```bash
# 可视化浏览所有表
pnpm db:studio
# 重新写入种子(不删表,多为 upsert
pnpm db:seed
```
仅想恢复 **48 强夺冠赔率** 为代码基准:管理后台 → **优胜冠军****导入世界杯 48 强**
清空数据库后重来:
```bash
docker compose down -v # 会删除 Docker 数据卷,慎用
docker compose up -d
pnpm db:migrate
pnpm db:seed
```
生产服务器如需清空业务数据并写入正规默认数据,优先使用脚本:
```bash
CONFIRM=YES ./scripts/prod-init-db.sh
```
该脚本会先备份 PostgreSQL再执行 Prisma 迁移,然后以 production 模式清空业务表并写入 `admin`、WC2026 小组赛 72 场和 48 强优胜盘。
---
## 十、相关文档
- [项目启动指南.md](./项目启动指南.md) — 安装、启动、排错
- [README.md](../README.md) — 项目概览