topfans/backend/PROJECT_SUMMARY.md
2026-04-07 22:29:48 +08:00

317 lines
9.3 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.

# TopFans 项目总结文档
## 一、项目概述
**TopFans** 是一个基于微服务架构的粉丝社交平台支持多明星身份、数字藏品NFT铸造、展馆展示、好友社交等功能。
### 核心特性
- 🎭 **多身份系统**:用户可以为不同明星创建粉丝身份,每个身份独立
- 🎨 **数字藏品**:支持铸造、展示、点赞数字藏品
- 🏛️ **展馆系统**:用户可以创建展馆展示藏品,支持展位管理
- 👥 **社交功能**:好友系统、点赞、随机推荐等
- 🔐 **JWT 认证**:基于 JWT 的认证系统Token 中包含用户ID和明星ID
---
## 二、技术架构
### 2.1 架构模式
- **微服务架构**采用领域驱动设计DDD拆分服务
- **API Gateway 模式**Gateway 层作为统一入口,提供 REST API
- **服务间通信**:使用 Dubbo-goTriple 协议,基于 gRPC
- **数据存储**PostgreSQL主数据库+ MinIO/S3对象存储
### 2.2 服务列表
#### 1. Gateway ServiceAPI 网关)
- **职责**统一入口、协议转换REST → gRPC、认证授权、请求路由
- **技术栈**Gin + Swagger
- **端口**8080
- **功能**
- REST API 接口
- JWT Token 验证
- Swagger 文档生成
#### 2. User Service用户服务
- **职责**用户注册登录、JWT 生成、粉丝档案管理、身份切换
- **端口**tri://127.0.0.1:20000
- **核心功能**
- 用户注册/登录
- JWT Token 生成和验证
- 粉丝档案FanProfile管理
- 粉丝身份列表和切换
- 密码管理
#### 3. Social Service社交服务
- **职责**:好友关系管理、用户搜索、点赞功能
- **端口**tri://127.0.0.1:20001
- **核心功能**
- 好友申请/同意/拒绝/删除
- 用户搜索(按 UID
- 随机用户推荐
- 资产点赞
#### 4. Asset Service资产服务
- **职责**:数字藏品铸造、资产查询、素材管理
- **端口**tri://127.0.0.1:20003
- **核心功能**
- 创建铸造订单
- 资产查询和列表
- 资产详情
- OSS 上传签名生成
- 上链状态查询
#### 5. Gallery Service展馆服务
- **职责**:展馆管理、展位管理、展品展示
- **端口**tri://127.0.0.1:20004
- **核心功能**
- 我的展馆/他人展馆查询
- 展位放置/移除藏品
- 展位解锁/购买
- 展位规则管理
---
## 三、核心业务逻辑
### 3.1 粉丝身份隔离机制
**设计原理**
- 每个用户user_id可以为多个明星创建粉丝身份
- 每个粉丝身份user_id + star_id拥有独立的数据空间
- 所有业务数据都基于 `user_id + star_id` 进行隔离
**JWT Token 设计**
```json
{
"user_id": 10000001,
"star_id": 123,
"updated_at": 1704067200000,
"iat": 1704067200,
"exp": 1704672000
}
```
**数据库设计**
- `users`用户账号user_id, mobile, password_hash
- `fan_profiles`粉丝档案user_id, star_id, nickname, level, crystal_balance- 联合主键
- 所有业务表都包含 `star_id` 作为隔离键
### 3.2 数字藏品铸造流程
```
1. 用户上传图片 → 获取 OSS 上传签名
2. 创建铸造订单 → 扣除水晶余额
3. 创建资产记录(链下)
4. 异步上链(模拟)
5. 更新资产状态
6. 更新用户资产数量
```
**关键点**
- 铸造需要消耗水晶CrystalBalance
- 上链为异步机制(当前为模拟)
- 上链失败会进行退款
### 3.3 展馆系统
**展位规则**
- 初始展位数3 个
- 抢展位时长4 小时(自动下架)
- 解锁条件:等级或水晶购买
- 规则存储在 PostgreSQL启动时加载到内存
**展位状态**
- `EMPTY`:空展位
- `OCCUPIED`:被占用
- `LOCKED`:未解锁
### 3.4 好友系统
**设计特点**
- 基于粉丝身份隔离(同一明星身份下的好友)
- 双向关系A 添加 BB 自动成为 A 的好友)
- 请求-确认机制(发送请求 → 接受/拒绝)
**数据库表**
- `friend_relations`:好友关系表
- `friend_requests`:好友申请表
---
## 四、API 设计
### 4.1 认证相关
- `POST /api/v1/auth/register` - 注册
- `POST /api/v1/auth/login` - 登录
- `GET /api/v1/auth/me` - 获取当前用户信息
- `POST /api/v1/auth/logout` - 登出
- `POST /api/v1/auth/refresh` - 刷新 Token
### 4.2 用户相关
- `GET /api/v1/users/:user_id` - 获取用户信息
- `GET /api/v1/fan-identities` - 获取可选粉丝身份列表
- `GET /api/v1/my/fan-identities` - 获取我的粉丝身份列表
- `POST /api/v1/my/fan-identities` - 添加粉丝身份
- `POST /api/v1/my/fan-identities/switch` - 切换粉丝身份
### 4.3 资产相关
- `GET /api/v1/assets/oss/signature` - 获取 OSS 上传签名
- `POST /api/v1/assets/upload` - 上传图片
- `POST /api/v1/assets/mints` - 创建铸造订单
- `GET /api/v1/assets/me/items` - 获取我的藏品列表
- `GET /api/v1/assets/:asset_id` - 获取资产详情
### 4.4 展馆相关
- `GET /api/v1/galleries/me` - 获取我的展馆
- `GET /api/v1/galleries/:target_uid` - 获取他人展馆
- `POST /api/v1/galleries/place` - 放置藏品
- `DELETE /api/v1/galleries/slots/:slot_id/asset` - 移除藏品
- `POST /api/v1/galleries/slots_unlock` - 解锁展位
### 4.5 社交相关
- `GET /api/v1/social/search-user` - 搜索用户
- `GET /api/v1/social/random-users` - 获取随机用户
- `POST /api/v1/social/friend-requests` - 发送好友请求
- `POST /api/v1/social/friend-requests/handle` - 处理好友请求
- `GET /api/v1/social/friends` - 获取好友列表
- `POST /api/v1/social/assets/:asset_id/like` - 点赞资产
---
## 五、数据存储
### 5.1 PostgreSQL主数据库
- 用户数据users, fan_profiles
- 资产数据assets, mint_orders
- 社交关系friend_relations, friend_requests, asset_likes
- 展馆数据booth_slots, exhibitions
- 规则表task_definitions, gallery_rules
### 5.2 MinIO/S3对象存储
- 图片资源(藏品封面、用户头像、素材)
### 5.3 区块链(链上存储)
- 资产确权Token ID、交易哈希
---
## 六、Swagger 文档
### 6.1 已修复的问题
- ✅ 修复了 Swagger UI 配置,使用 `ginSwagger.WrapHandler` 替代 `CustomWrapHandler`
- ✅ Swagger 文档已生成(`gateway/docs/` 目录)
### 6.2 访问方式
- **Swagger UI**http://localhost:8080/swagger/index.html
- **Swagger JSON**http://localhost:8080/swagger/doc.json
### 6.3 生成命令
```bash
cd backend
bash gen-swagger.sh
```
---
## 七、项目结构
```
TopFans/
├── backend/ # 后端服务
│ ├── gateway/ # API 网关
│ │ ├── controller/ # 控制器层
│ │ ├── dto/ # 数据传输对象
│ │ ├── middleware/ # 中间件
│ │ ├── router/ # 路由配置
│ │ └── docs/ # Swagger 文档
│ ├── services/ # 微服务
│ │ ├── userService/ # 用户服务
│ │ ├── socialService/ # 社交服务
│ │ ├── assetService/ # 资产服务
│ │ └── galleryService/ # 展馆服务
│ ├── pkg/ # 公共包
│ │ ├── database/ # 数据库连接
│ │ ├── logger/ # 日志
│ │ ├── jwt/ # JWT 工具
│ │ └── models/ # 数据模型
│ ├── proto/ # Proto 定义
│ └── docs/ # 项目文档
└── frontend/ # 前端Vue/uni-app
```
---
## 八、关键设计决策
### 8.1 粉丝身份隔离
- **原因**:用户可以为多个明星创建身份,每个身份独立
- **实现**:所有业务表都包含 `star_id`,查询时使用 `user_id + star_id` 联合查询
### 8.2 JWT Token 设计
- **原因**简化前端使用Token 中包含所有必要信息
- **实现**Token 中包含 `user_id``star_id`,前端可直接解析
### 8.3 规则管理
- **原因**:规则需要灵活配置,但查询频繁
- **实现**:规则存储在 PostgreSQL服务启动时加载到内存
### 8.4 服务间通信
- **原因**:微服务需要高效通信
- **实现**:使用 Dubbo-goTriple 协议,基于 gRPC
---
## 九、开发指南
### 9.1 快速启动
```bash
cd backend
./start-all.sh
```
### 9.2 生成 Swagger 文档
```bash
cd backend
bash gen-swagger.sh
```
### 9.3 查看日志
```bash
tail -f logs/gateway.log
tail -f logs/*.log
```
---
## 十、待实现功能
### 10.1 任务系统
- 任务定义管理
- 任务进度跟踪
- 任务奖励发放
### 10.2 推荐系统
- 广场推荐小屋列表
- TOP 藏品展板
- 推荐算法
### 10.3 区块链集成
- 真实上链功能
- 交易状态查询
- 链上数据同步
---
## 十一、总结
TopFans 是一个设计良好的微服务架构项目,具有以下特点:
1. **清晰的职责划分**:每个服务职责明确,边界清晰
2. **灵活的身份系统**:支持多明星身份,数据隔离完善
3. **完整的业务功能**:涵盖用户、资产、展馆、社交等核心功能
4. **规范的 API 设计**:统一的响应格式,完整的 Swagger 文档
5. **良好的扩展性**:支持水平扩展,规则可配置
项目已经实现了核心功能Swagger 文档已修复,可以正常使用。