5.3 KiB
5.3 KiB
邀请码功能修复
问题描述
用户使用邀请码登录后,没有成功获得5金币奖励。
问题原因
数据库表 nf_user 缺少邀请码相关的字段:
invite_code- 邀请码invited_by- 被谁邀请invite_count- 邀请人数invite_reward_total- 邀请奖励总额
这些字段只在 Python 的 lover/models.py 中定义了,但数据库中并没有实际创建这些列。
解决方案
情况 1:字段不存在
如果数据库中没有邀请码字段,执行:
mysql -u aiuser -p fastadmin < lover/migrations/add_invite_fields.sql
情况 2:字段已存在(推荐)
如果遇到 "Duplicate column name" 错误,说明字段已存在,使用智能修复脚本:
mysql -u aiuser -p fastadmin < lover/migrations/fix_invite_fields.sql
这个脚本会:
- 检查每个字段是否存在,只添加缺失的字段
- 检查索引是否存在,只添加缺失的索引
- 显示最终的字段和索引信息
1. 执行修复脚本
# 推荐:使用智能修复脚本(自动检查并修复)
mysql -u aiuser -p fastadmin < lover/migrations/fix_invite_fields.sql
2. 检查字段状态
# 查看邀请码相关字段
mysql -u aiuser -p fastadmin < lover/migrations/check_invite_fields.sql
3. 测试邀请码功能
# 查看邀请码数据和日志
mysql -u aiuser -p fastadmin < lover/migrations/test_invite_function.sql
-
获取邀请码
- 登录系统
- 访问"我的" -> "邀请好友"页面
- 系统会自动生成邀请码
-
使用邀请码
- 新用户注册/登录时
- 在登录页面输入邀请码
- 登录成功后会自动调用邀请码接口
-
验证奖励
- 邀请人获得 10 金币
- 被邀请人获得 5 金币
- 检查
nf_user_money_log表中的记录
邀请码功能说明
奖励规则
- 邀请人奖励:10 金币
- 被邀请人奖励:5 金币
- 每个用户只能使用一次邀请码
- 不能使用自己的邀请码
API 接口
1. 获取邀请信息
GET /config/invite/info
Authorization: Bearer {token}
响应:
{
"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"
}
响应:
{
"code": 1,
"data": {
"message": "邀请码使用成功!您获得了5.0金币",
"reward": 5.0,
"balance": 5.0
}
}
前端调用流程
-
登录页面 (
xuniYou/pages/login/index.vue)- 用户输入邀请码(可选)
- 登录成功后自动调用
applyInviteCode()方法
-
邀请页面 (
xuniYou/pages/mine/invite.vue)- 显示用户的邀请码
- 显示邀请统计(邀请人数、奖励总额)
- 提供复制邀请码功能
数据库表结构
-- 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 表中:
-- 邀请人的记录
memo = '邀请新用户奖励'
money = 10.00
-- 被邀请人的记录
memo = '使用邀请码奖励'
money = 5.00
注意事项
-
邀请码生成规则
- 6位字符
- 只包含大写字母和数字
- 排除易混淆字符(0、O、1、I)
- 自动检查重复
-
安全性
- 使用数据库行锁防止并发问题
- 验证邀请码是否存在
- 验证用户是否已使用过邀请码
- 不能使用自己的邀请码
-
事务处理
- 使用数据库事务确保数据一致性
- 失败时自动回滚
- 记录详细的金币日志
测试步骤
1. 本地测试
# 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. 功能测试
- 用户 A 登录,获取邀请码
- 用户 B 注册/登录时输入用户 A 的邀请码
- 检查用户 A 和用户 B 的金币余额
- 检查
nf_user_money_log表中的记录
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:编写修复文档
下一步
- 执行数据库迁移
- 测试邀请码功能
- 更新部署文档,添加邀请码迁移步骤