Ai_GirlFriend/开发/2026年2月3日/邀请码功能修复.md
2026-02-03 18:00:47 +08:00

237 lines
5.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.

# 邀请码功能修复
## 问题描述
用户使用邀请码登录后没有成功获得5金币奖励。
## 问题原因
数据库表 `nf_user` 缺少邀请码相关的字段:
- `invite_code` - 邀请码
- `invited_by` - 被谁邀请
- `invite_count` - 邀请人数
- `invite_reward_total` - 邀请奖励总额
这些字段只在 Python 的 `lover/models.py` 中定义了,但数据库中并没有实际创建这些列。
## 解决方案
### 情况 1字段不存在
如果数据库中没有邀请码字段,执行:
```bash
mysql -u aiuser -p fastadmin < lover/migrations/add_invite_fields.sql
```
### 情况 2字段已存在推荐
如果遇到 "Duplicate column name" 错误,说明字段已存在,使用智能修复脚本:
```bash
mysql -u aiuser -p fastadmin < lover/migrations/fix_invite_fields.sql
```
这个脚本会:
- 检查每个字段是否存在,只添加缺失的字段
- 检查索引是否存在,只添加缺失的索引
- 显示最终的字段和索引信息
### 1. 执行修复脚本
```bash
# 推荐:使用智能修复脚本(自动检查并修复)
mysql -u aiuser -p fastadmin < lover/migrations/fix_invite_fields.sql
```
### 2. 检查字段状态
```bash
# 查看邀请码相关字段
mysql -u aiuser -p fastadmin < lover/migrations/check_invite_fields.sql
```
### 3. 测试邀请码功能
```bash
# 查看邀请码数据和日志
mysql -u aiuser -p fastadmin < lover/migrations/test_invite_function.sql
```
1. **获取邀请码**
- 登录系统
- 访问"我的" -> "邀请好友"页面
- 系统会自动生成邀请码
2. **使用邀请码**
- 新用户注册/登录时
- 在登录页面输入邀请码
- 登录成功后会自动调用邀请码接口
3. **验证奖励**
- 邀请人获得 10 金币
- 被邀请人获得 5 金币
- 检查 `nf_user_money_log` 表中的记录
## 邀请码功能说明
### 奖励规则
- **邀请人奖励**10 金币
- **被邀请人奖励**5 金币
- 每个用户只能使用一次邀请码
- 不能使用自己的邀请码
### API 接口
#### 1. 获取邀请信息
```
GET /config/invite/info
Authorization: Bearer {token}
```
响应:
```json
{
"code": 1,
"data": {
"invite_code": "ABC123",
"invite_count": 5,
"invite_reward_total": 50.00,
"invite_url": "https://your-domain.com/register?invite=ABC123"
}
}
```
#### 2. 使用邀请码
```
POST /config/invite/apply
Authorization: Bearer {token}
Content-Type: application/json
{
"invite_code": "ABC123"
}
```
响应:
```json
{
"code": 1,
"data": {
"message": "邀请码使用成功您获得了5.0金币",
"reward": 5.0,
"balance": 5.0
}
}
```
### 前端调用流程
1. **登录页面** (`xuniYou/pages/login/index.vue`)
- 用户输入邀请码(可选)
- 登录成功后自动调用 `applyInviteCode()` 方法
2. **邀请页面** (`xuniYou/pages/mine/invite.vue`)
- 显示用户的邀请码
- 显示邀请统计(邀请人数、奖励总额)
- 提供复制邀请码功能
### 数据库表结构
```sql
-- nf_user 表新增字段
invite_code VARCHAR(10) DEFAULT NULL COMMENT '邀请码'
invited_by VARCHAR(10) DEFAULT NULL COMMENT '被谁邀请(邀请码)'
invite_count INT(11) DEFAULT 0 COMMENT '邀请人数'
invite_reward_total DECIMAL(10,2) DEFAULT 0.00 COMMENT '邀请奖励总额'
-- 索引
UNIQUE INDEX idx_invite_code (invite_code)
INDEX idx_invited_by (invited_by)
```
### 金币日志记录
所有邀请奖励都会记录在 `nf_user_money_log` 表中:
```sql
-- 邀请人的记录
memo = '邀请新用户奖励'
money = 10.00
-- 被邀请人的记录
memo = '使用邀请码奖励'
money = 5.00
```
## 注意事项
1. **邀请码生成规则**
- 6位字符
- 只包含大写字母和数字
- 排除易混淆字符0、O、1、I
- 自动检查重复
2. **安全性**
- 使用数据库行锁防止并发问题
- 验证邀请码是否存在
- 验证用户是否已使用过邀请码
- 不能使用自己的邀请码
3. **事务处理**
- 使用数据库事务确保数据一致性
- 失败时自动回滚
- 记录详细的金币日志
## 测试步骤
### 1. 本地测试
```bash
# 1. 执行数据库迁移
mysql -u aiuser -p fastadmin < lover/migrations/add_invite_fields.sql
# 2. 重启 Python 服务
# Windows
taskkill /F /IM python.exe
python -m uvicorn lover.main:app --host 0.0.0.0 --port 30101 --reload
# Linux
sudo systemctl restart aigirlfriend-python
```
### 2. 功能测试
1. 用户 A 登录,获取邀请码
2. 用户 B 注册/登录时输入用户 A 的邀请码
3. 检查用户 A 和用户 B 的金币余额
4. 检查 `nf_user_money_log` 表中的记录
### 3. 异常测试
1. 使用不存在的邀请码 → 应提示"邀请码不存在"
2. 重复使用邀请码 → 应提示"您已经使用过邀请码"
3. 使用自己的邀请码 → 应提示"不能使用自己的邀请码"
## 相关文件
- **数据库迁移**`lover/migrations/add_invite_fields.sql`
- **数据模型**`lover/models.py`
- **后端 API**`lover/routers/config.py`
- **前端登录页**`xuniYou/pages/login/index.vue`
- **前端邀请页**`xuniYou/pages/mine/invite.vue`
## 更新日志
- **2026-02-03**:创建邀请码字段迁移文件
- **2026-02-03**:编写修复文档
## 下一步
1. 执行数据库迁移
2. 测试邀请码功能
3. 更新部署文档,添加邀请码迁移步骤