574 lines
15 KiB
Markdown
574 lines
15 KiB
Markdown
# TopFans 产品需求文档 (PRD)
|
|
|
|
## 文档信息
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 项目名称 | TopFans |
|
|
| 版本 | V1.0 |
|
|
| 文档类型 | 产品需求文档 |
|
|
| 生成日期 | 2026-03-11 |
|
|
|
|
---
|
|
|
|
## 1. 项目概述
|
|
|
|
### 1.1 产品定位
|
|
|
|
TopFans 是一款基于 NFT 数字藏品技术的粉丝社交应用,连接明星与粉丝,提供藏品铸造、展馆展示、社交互动等核心功能。
|
|
|
|
### 1.2 目标用户
|
|
|
|
- 明星粉丝群体
|
|
- 数字藏品爱好者
|
|
- 社交娱乐用户
|
|
|
|
### 1.3 技术架构
|
|
|
|
#### 前端技术栈
|
|
| 技术 | 说明 |
|
|
|------|------|
|
|
| uni-app | 跨平台应用框架 |
|
|
| Vue 3 | 前端框架 |
|
|
| Vuex 4 | 状态管理 |
|
|
| HBuilderX | 构建工具 |
|
|
|
|
#### 后端技术栈
|
|
| 技术 | 说明 |
|
|
|------|------|
|
|
| Go 1.25.5 | 开发语言 |
|
|
| Gin | HTTP 网关 |
|
|
| Dubbo-go | 微服务框架 (Triple协议) |
|
|
| PostgreSQL | 数据库 |
|
|
| GORM | ORM框架 |
|
|
| JWT | 认证 |
|
|
| 阿里云 OSS | 对象存储 |
|
|
|
|
#### 微服务架构
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ Mobile App (uni-app) │
|
|
└─────────────────────────────────┬───────────────────────────────────────┘
|
|
│ HTTP
|
|
▼
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ API Gateway (Gin :8080) │
|
|
│ • JWT认证 • 请求路由 • Swagger文档 │
|
|
└─────────┬──────────────────────┬───────────────────────┬───────────────┘
|
|
│ │ │
|
|
│ Dubbo RPC │ Dubbo RPC │ Dubbo RPC
|
|
▼ ▼ ▼
|
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
│ User Service │ │ Social Service │ │ Asset Service │
|
|
│ (:20000) │ │ (:20001) │ │ (:20003) │
|
|
│ │ │ │ │ │
|
|
│ • 注册/登录 │ │ • 好友管理 │ │ • 藏品铸造 │
|
|
│ • 粉丝身份 │ │ • 用户搜索 │ │ • OSS上传 │
|
|
│ • 密码管理 │ │ • 点赞功能 │ │ • 藏品查询 │
|
|
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
|
|
│ │ │
|
|
└─────────────────────┼──────────────────────┘
|
|
│ Dubbo RPC
|
|
▼
|
|
┌─────────────────────────┐
|
|
│ Gallery Service │
|
|
│ (:20004) │
|
|
│ │
|
|
│ • 展馆管理 │
|
|
│ • 展位管理 │
|
|
│ • 藏品展示 │
|
|
└─────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────┐
|
|
│ PostgreSQL │
|
|
│ + GORM │
|
|
└─────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 2. 功能模块总览
|
|
|
|
| 模块 | 核心功能 | 状态 |
|
|
|------|----------|------|
|
|
| 认证系统 | 注册、登录、Token管理 | ✅ 已实现 |
|
|
| 粉丝身份系统 | 身份选择、多身份切换 | ✅ 已实现 |
|
|
| 藏品系统 | 铸造、上传、详情、点赞 | ✅ 已实现 |
|
|
| 展馆系统 | 展位管理、藏品展示 | ✅ 已实现 |
|
|
| 社交系统 | 好友搜索、申请、删除 | ✅ 已实现 |
|
|
| 任务系统 | 任务列表、奖励领取 | 🔄 部分实现 |
|
|
| 新手引导 | 引导流程、状态管理 | 🔄 部分实现 |
|
|
|
|
---
|
|
|
|
## 3. 详细功能需求
|
|
|
|
### 3.1 认证系统 (Auth)
|
|
|
|
#### 3.1.1 用户注册
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | POST /api/v1/auth/register |
|
|
| 认证 | 无需认证 |
|
|
| 请求参数 | uid(手机号), password, fan_identity_id, nickname |
|
|
| 返回 | access_token, user基础信息, 当前身份信息 |
|
|
| 说明 | 注册时必须选择一个粉丝身份(nickname唯一性?) |
|
|
|
|
#### 3.1.2 用户登录
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | POST /api/v1/auth/login |
|
|
| 认证 | 无需认证 |
|
|
| 请求参数 | uid, password |
|
|
| 返回 | access_token, user基础信息 |
|
|
|
|
#### 3.1.3 获取当前用户
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | GET /api/v1/auth/me |
|
|
| 认证 | JWT Token |
|
|
| 返回 | uid, nickname, current_identity |
|
|
|
|
#### 3.1.4 修改密码
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | POST /api/v1/account/password |
|
|
| 认证 | JWT Token |
|
|
| 请求参数 | old_password, new_password |
|
|
|
|
#### 3.1.5 退出登录
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | POST /api/v1/auth/logout |
|
|
| 认证 | JWT Token |
|
|
|
|
#### 3.1.6 注销账号
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | POST /api/user/delete-account |
|
|
| 认证 | JWT Token |
|
|
|
|
---
|
|
|
|
### 3.2 粉丝身份系统 (Fan Identity)
|
|
|
|
#### 3.2.1 获取可选粉丝身份列表
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | GET /api/v1/fan-identities |
|
|
| 认证 | 无需认证 |
|
|
| 查询参数 | keyword, page, page_size |
|
|
| 返回 | star_id, identity_id, name, tag |
|
|
|
|
#### 3.2.2 新增粉丝身份
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | POST /api/v1/my/fan-identities |
|
|
| 认证 | JWT Token |
|
|
| 请求参数 | identity_id |
|
|
| 说明 | 最多绑定2个身份 |
|
|
|
|
#### 3.2.3 获取我的粉丝身份列表
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | GET /api/v1/my/fan-identities |
|
|
| 认证 | JWT Token |
|
|
|
|
#### 3.2.4 切换粉丝身份
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | POST /api/v1/my/fan-identities/switch |
|
|
| 认证 | JWT Token |
|
|
| 请求参数 | new_star_id |
|
|
| 返回 | 新token, current_identity信息 |
|
|
|
|
---
|
|
|
|
### 3.3 个人信息 (Profile)
|
|
|
|
#### 3.3.1 获取个人信息
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | GET /api/v1/me/profile |
|
|
| 认证 | JWT Token |
|
|
| 返回 | uid, nickname, fan_identity, fan_level, starbook_limit, slot_limit, assets_num, crystal_balance |
|
|
|
|
#### 3.3.2 修改昵称
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | PUT /api/v1/me/nickname |
|
|
| 认证 | JWT Token |
|
|
| 请求参数 | nickname |
|
|
|
|
#### 3.3.3 更新头像
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | PUT /api/v1/me/avatar |
|
|
| 认证 | JWT Token |
|
|
| 请求参数 | avatar_url |
|
|
|
|
---
|
|
|
|
### 3.4 藏品系统 (Asset/Mint)
|
|
|
|
#### 3.4.1 获取OSS上传签名
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | GET /api/v1/assets/oss/signature |
|
|
| 认证 | JWT Token |
|
|
| 返回 | OSS上传所需的签名信息 |
|
|
|
|
#### 3.4.2 获取OSS预签名URL
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | GET /api/v1/assets/oss/presigned-url |
|
|
| 认证 | JWT Token |
|
|
| 请求参数 | object_key |
|
|
|
|
#### 3.4.3 创建铸造订单
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | POST /api/v1/assets/mints |
|
|
| 认证 | JWT Token |
|
|
| 请求参数 | name, type, pic_url, material |
|
|
| 返回 | mint_id, status, asset_id |
|
|
|
|
#### 3.4.4 删除铸造订单
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | DELETE /api/v1/assets/mints/{orderId} |
|
|
| 认证 | JWT Token |
|
|
|
|
#### 3.4.5 获取我的藏品列表
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | GET /api/v1/assets/me/items |
|
|
| 认证 | JWT Token |
|
|
| 查询参数 | page, page_size |
|
|
| 返回 | asset_id, name, cover_url, like_count, mint_status, on_chain |
|
|
|
|
#### 3.4.6 获取藏品详情
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | GET /api/v1/assets/{assetId} |
|
|
| 认证 | 公开 |
|
|
| 返回 | asset_id, name, type, cover_url, owner_uid, owner_nickname, like_count, on_chain |
|
|
|
|
#### 3.4.7 点赞藏品
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | POST /api/v1/social/assets/{assetId}/like |
|
|
| 认证 | JWT Token |
|
|
| 返回 | liked, like_count |
|
|
|
|
#### 3.4.8 取消点赞
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | DELETE /api/v1/social/assets/{assetId}/like |
|
|
| 认证 | JWT Token |
|
|
| 返回 | liked, like_count |
|
|
|
|
---
|
|
|
|
### 3.5 展馆系统 (Gallery)
|
|
|
|
#### 3.5.1 获取我的展馆
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | GET /api/v1/mygalleries |
|
|
| 认证 | JWT Token |
|
|
| 返回 | gallery_owner_id, slot_total, slots(含asset信息) |
|
|
|
|
#### 3.5.2 获取他人展馆
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | GET /api/v1/galleries/{targetUid} |
|
|
| 认证 | JWT Token |
|
|
| 返回 | 同上 |
|
|
| 说明 | 需校验粉丝身份一致才能访问 |
|
|
|
|
#### 3.5.3 展位展示藏品
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | POST /api/v1/galleries/place |
|
|
| 认证 | JWT Token |
|
|
| 请求参数 | asset_id, gallery_owner_id, slot_id |
|
|
| 返回 | status, occupied_until, occupier_uid |
|
|
|
|
#### 3.5.4 下架展位藏品
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | DELETE /api/v1/galleries/slots/{slotId}/asset |
|
|
| 认证 | JWT Token |
|
|
|
|
---
|
|
|
|
### 3.6 社交系统 (Social)
|
|
|
|
#### 3.6.1 搜索用户
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | GET /api/v1/social/search-user |
|
|
| 认证 | JWT Token |
|
|
| 查询参数 | keyword |
|
|
| 返回 | uid, nickname, is_friend |
|
|
|
|
#### 3.6.2 获取好友列表
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | GET /api/v1/social/friends |
|
|
| 认证 | JWT Token |
|
|
| 查询参数 | page, page_size |
|
|
| 返回 | uid, nickname, fan_level |
|
|
|
|
#### 3.6.3 发送好友请求
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | POST /api/v1/social/friend-requests |
|
|
| 认证 | JWT Token |
|
|
| 请求参数 | target_uid |
|
|
|
|
#### 3.6.4 获取已发送好友请求
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | GET /api/v1/social/friend-requests |
|
|
| 认证 | JWT Token |
|
|
| 查询参数 | type=sent |
|
|
|
|
#### 3.6.5 获取收到的好友请求
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | GET /api/v1/social/friend-requests |
|
|
| 认证 | JWT Token |
|
|
| 查询参数 | type=received |
|
|
|
|
#### 3.6.6 处理好友请求
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | POST /api/v1/social/friend-requests/handle |
|
|
| 认证 | JWT Token |
|
|
| 请求参数 | request_id, action(accept/reject) |
|
|
|
|
#### 3.6.7 删除好友
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | DELETE /api/v1/social/friends |
|
|
| 认证 | JWT Token |
|
|
| 请求参数 | friend_uid |
|
|
|
|
---
|
|
|
|
### 3.7 任务系统 (Task)
|
|
|
|
#### 3.7.1 获取任务列表
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | GET /api/v1/tasks |
|
|
| 认证 | JWT Token |
|
|
| 返回 | task_id, title, status, reward |
|
|
|
|
#### 3.7.2 领取任务奖励
|
|
|
|
| 项目 | 内容 |
|
|
|------|------|
|
|
| 接口 | POST /api/v1/tasks/claim |
|
|
| 认证 | JWT Token |
|
|
| 请求参数 | task_id |
|
|
|
|
---
|
|
|
|
## 4. 数据库模型
|
|
|
|
### 4.1 核心数据表
|
|
|
|
| 表名 | 说明 |
|
|
|------|------|
|
|
| users | 用户表 |
|
|
| stars | 明星信息表 |
|
|
| fan_profiles | 粉丝档案表(用户-明星关联) |
|
|
| assets | 资产/藏品表 |
|
|
| mint_orders | 铸造订单表 |
|
|
| asset_likes | 点赞记录表 |
|
|
| friendships | 好友关系表 |
|
|
| friend_requests | 好友请求表 |
|
|
| booth_slots | 展位表 |
|
|
| exhibitions | 展品展示表 |
|
|
|
|
---
|
|
|
|
## 5. 用户界面结构
|
|
|
|
### 5.1 页面路由
|
|
|
|
| 路由 | 页面 | 说明 |
|
|
|------|------|------|
|
|
| /pages/login/login | 登录页 | 用户登录 |
|
|
| /pages/register/register | 注册页 | 用户注册 |
|
|
| /pages/profile/setNickname | 设置昵称 | 注册时设置昵称 |
|
|
| /pages/profile/selectRole | 选择角色 | 选择粉丝身份 |
|
|
| /pages/profile/profile | 个人中心 | 用户资料管理 |
|
|
| /pages/square/square | 广场首页 | 主页面 |
|
|
| /pages/exhibition/exhibition | 展馆页 | 展馆/展位管理 |
|
|
| /pages/castlove/success | 铸造成功 | 铸造成功展示 |
|
|
|
|
### 5.2 主要组件
|
|
|
|
| 组件 | 说明 |
|
|
|------|------|
|
|
| SquareContent | 广场主内容区(切换广场/好友/星册/铸爱/装扮) |
|
|
| FriendsContent | 好友列表与社交功能 |
|
|
| StarbookContent | 我的藏品/星册 |
|
|
| CastloveContent | 铸造功能 |
|
|
| DressupContent | 装扮功能 |
|
|
| NftCard | 藏品卡片 |
|
|
| NftDetailModal | 藏品详情弹窗 |
|
|
| Avatar | 头像组件 |
|
|
| Header | 顶部导航栏 |
|
|
| BottomNav | 底部导航栏 |
|
|
| TaskModal | 任务弹窗 |
|
|
|
|
---
|
|
|
|
## 6. 业务规则
|
|
|
|
### 6.1 粉丝身份隔离
|
|
|
|
- 每个用户可绑定最多2个粉丝身份
|
|
- 切换身份后,藏品、展馆、好友等数据按身份隔离
|
|
- Token中包含user_id和star_id
|
|
|
|
### 6.2 展馆规则
|
|
|
|
- 初始展位: 3个
|
|
- 可解锁/购买更多展位
|
|
- 可展示藏品到他人展馆空位
|
|
- 抢展位: 4小时后自动下架
|
|
|
|
### 6.3 好友规则
|
|
|
|
- 需双向确认才能成为好友
|
|
- 默认上限: 50个
|
|
- 可随等级解锁更多
|
|
|
|
### 6.4 铸造规则
|
|
|
|
- 支持平台素材或用户上传
|
|
- 需审核和AI生成封面
|
|
- 铸造后生成链上确权
|
|
|
|
---
|
|
|
|
## 7. 安全要求
|
|
|
|
### 7.1 认证
|
|
|
|
- JWT Token认证
|
|
- Token有效期: 7天
|
|
- 从Header提取: Authorization: Bearer \<token\>
|
|
|
|
### 7.2 响应格式
|
|
|
|
```json
|
|
{
|
|
"code": 200,
|
|
"message": "ok",
|
|
"data": {}
|
|
}
|
|
```
|
|
|
|
### 7.3 分页格式
|
|
|
|
```json
|
|
{
|
|
"code": 200,
|
|
"message": "ok",
|
|
"data": {
|
|
"items": [],
|
|
"page": 1,
|
|
"page_size": 20,
|
|
"total": 100
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 8. 外部依赖
|
|
|
|
| 服务 | 说明 |
|
|
|------|------|
|
|
| 阿里云OSS | 藏品图片存储 |
|
|
| PostgreSQL | 数据持久化 |
|
|
| (区块链) | 数字藏品上链(待实现) |
|
|
|
|
---
|
|
|
|
## 9. 待实现功能
|
|
|
|
根据代码分析,以下功能标记为待实现或部分实现:
|
|
|
|
1. **广场推荐** - 广场小屋列表、TOP藏品展板
|
|
2. **任务系统** - 完整任务列表和奖励领取
|
|
3. **新手引导** - 引导流程和状态管理
|
|
4. **踢走占位** - 被占位者踢走占领者
|
|
5. **解锁展位** - 等级解锁或货币购买
|
|
6. **系统推荐好友** - 推荐好友列表
|
|
|
|
---
|
|
|
|
## 10. 附录
|
|
|
|
### 10.1 错误码定义
|
|
|
|
| 错误码 | 说明 |
|
|
|--------|------|
|
|
| 200 | 成功 |
|
|
| 401 | Token失效/未认证 |
|
|
| 400 | 请求参数错误 |
|
|
| 500 | 服务器内部错误 |
|
|
|
|
### 10.2 版本历史
|
|
|
|
| 版本 | 日期 | 说明 |
|
|
|------|------|------|
|
|
| V1.0 | 2026-03-11 | 初始版本(基于代码分析) |
|
|
|
|
---
|
|
|
|
*本文档基于代码分析自动生成,如需更新请参考实际实现。*
|