You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
8.3 KiB
8.3 KiB
积分服务部署完成
日期:2026-01-27
类型:部署记录
状态:✅ 已完成
部署概述
成功完成积分服务(Credit Service)的数据库迁移、测试数据初始化和 API 部署。
执行步骤
1. 创建 UUID v7 函数
文件:server/app/migrations/sql/000_create_uuid_v7_function.sql
CREATE EXTENSION IF NOT EXISTS pgcrypto;
CREATE OR REPLACE FUNCTION gen_uuid_v7() RETURNS UUID AS $$
...
$$ LANGUAGE plpgsql VOLATILE;
执行:
docker exec jointo-server-app psql postgresql://jointoAI:123456@postgres:5432/jointo \
-f /app/app/migrations/sql/000_create_uuid_v7_function.sql
结果:✅ 函数创建成功
2. 创建 updated_at 触发器函数
文件:server/app/migrations/sql/001_create_trigger_function.sql
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = now();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
执行:
docker exec jointo-server-app psql postgresql://jointoAI:123456@postgres:5432/jointo \
-f /app/app/migrations/sql/001_create_trigger_function.sql
结果:✅ 函数创建成功
3. 创建积分服务数据表
文件:server/app/migrations/sql/009_credit_service_tables.sql
执行:
docker exec jointo-server-app psql postgresql://jointoAI:123456@postgres:5432/jointo \
-f /app/app/migrations/sql/009_credit_service_tables.sql
创建的表(5 张):
credit_transactions- 积分流水表credit_consumption_logs- 积分消耗记录表credit_packages- 积分套餐表credit_pricing- 积分定价配置表credit_gifts- 积分赠送记录表
结果:✅ 5 张表创建成功,30+ 索引创建成功
4. 创建触发器
执行:
docker exec jointo-server-app psql postgresql://jointoAI:123456@postgres:5432/jointo -c "
CREATE TRIGGER update_credit_transactions_updated_at ...
CREATE TRIGGER update_credit_consumption_logs_updated_at ...
CREATE TRIGGER update_credit_packages_updated_at ...
CREATE TRIGGER update_credit_pricing_updated_at ...
"
结果:✅ 4 个触发器创建成功
5. 初始化测试数据
文件:server/app/migrations/init_credit_data.py
修复:
- 修改导入:
from app.core.database import async_session_maker - 修改调用:
async with async_session_maker() as session
执行:
docker exec jointo-server-app python -m app.migrations.init_credit_data
初始化数据:
- 4 个积分套餐(入门、超值、专业、企业)
- 10 种功能定价配置(图片、视频、文本、音频等)
结果:✅ 测试数据初始化成功
6. 注册 API 路由
修改文件:server/app/api/v1/router.py
变更:
from app.api.v1 import health, auth, users, folders, projects, ai, credits
api_router.include_router(credits.router)
结果:✅ 路由注册成功
7. 修复 API 响应格式
问题:ApiResponse.success() 方法不存在
修复:
- 修改导入:
from app.schemas.response import success_response - 替换所有
ApiResponse.success(...)为success_response(...) - 移除
response_model=ApiResponse[...]类型注解
结果:✅ API 响应格式修复成功
8. 重启服务
执行:
docker restart jointo-server-app
结果:✅ 服务重启成功,所有表被识别
验证结果
API 端点测试
1. 获取套餐列表
请求:
curl http://localhost:6170/api/v1/credits/packages
响应:
{
"code": 200,
"message": "Success",
"data": {
"items": [
{
"packageId": "019bfd7c-a106-7778-878b-9f925f1cf9ff",
"name": "入门套餐",
"price": "9.90",
"credits": 100,
"bonusCredits": 10,
...
},
...
]
}
}
状态:✅ 正常
2. 获取套餐详情
请求:
curl http://localhost:6170/api/v1/credits/packages/019bfd7c-a106-7778-878b-9f925f1cf9ff
响应:
{
"code": 200,
"message": "Success",
"data": {
"packageId": "019bfd7c-a106-7778-878b-9f925f1cf9ff",
"name": "入门套餐",
"description": "适合新手用户体验",
...
}
}
状态:✅ 正常
可用的 API 端点
积分查询(3 个)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/credits/balance |
查询用户积分余额 |
| GET | /api/v1/credits/transactions |
查询积分流水 |
| GET | /api/v1/credits/consumption |
查询消耗记录 |
积分操作(4 个)
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/v1/credits/calculate |
计算所需积分 |
| POST | /api/v1/credits/consume |
消耗积分(预扣) |
| POST | /api/v1/credits/refund |
退还积分(任务失败) |
| POST | /api/v1/credits/confirm |
确认消耗(任务成功) |
积分套餐(2 个)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/credits/packages |
获取充值套餐列表 |
| GET | /api/v1/credits/packages/{id} |
获取套餐详情 |
管理员接口(2 个)
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/v1/credits/gift |
赠送积分 |
| POST | /api/v1/credits/expire-pending |
超时自动退款 |
数据库状态
表列表
\dt credit_*
credit_consumption_logs | table | jointoAI
credit_gifts | table | jointoAI
credit_packages | table | jointoAI
credit_pricing | table | jointoAI
credit_transactions | table | jointoAI
测试数据
积分套餐:4 个
- 入门套餐:¥9.90 = 100 + 10 积分
- 超值套餐:¥49.90 = 600 + 100 积分(推荐)
- 专业套餐:¥99.90 = 1300 + 300 积分
- 企业套餐:¥299.90 = 4500 + 1500 积分
定价配置:10 种功能类型
- 图片生成、视频生成、文本处理、音频生成、音效生成
- 配音生成、字幕生成、资源生成、分镜脚本生成、剧本生成
遗留问题
1. Celery Beat 定时任务
状态:⚠️ 未启动
任务:
expire_pending_consumptions- 每小时超时退款cleanup_old_transactions- 每天清理旧交易记录cleanup_old_consumption_logs- 每周清理旧消耗记录
启动命令:
celery -A app.tasks.celery_app beat --loglevel=info
celery -A app.tasks.celery_app worker --loglevel=info
2. 与 AI Service 集成
状态:⚠️ 待实现
需要:
- AI Service 调用 Credit Service API
- ai_jobs 表关联 consumption_log_id
- 任务完成/失败回调
3. 与 Recharge Service 集成
状态:⚠️ 待实现
需要:
- 充值订单管理
- 支付回调处理
- 微信/支付宝支付集成
文件清单
新增文件(13 个)
迁移脚本:
server/app/migrations/sql/000_create_uuid_v7_function.sqlserver/app/migrations/sql/001_create_trigger_function.sqlserver/app/migrations/sql/009_credit_service_tables.sqlserver/app/migrations/009_credit_service_tables.pyserver/app/migrations/init_credit_data.py
核心代码:
server/app/models/credit.pyserver/app/repositories/credit_repository.pyserver/app/services/credit_service.pyserver/app/schemas/credit.pyserver/app/api/v1/credits.pyserver/app/tasks/credit_tasks.py
文档:
docs/server/changelogs/2026-01-27-credit-service-implementation.mddocs/server/changelogs/2026-01-27-credit-service-deployment.md
修改文件(5 个)
server/app/core/exceptions.py- 新增 InsufficientCreditsErrorserver/app/api/v1/router.py- 注册 credits 路由server/app/tasks/celery_app.py- 注册定时任务server/app/models/__init__.py- 导出 Credit Modelsserver/app/api/v1/__init__.py- 导入 credits 模块
总结
✅ 已完成:
- 数据库迁移(5 张表 + 30+ 索引)
- 测试数据初始化(4 个套餐 + 10 种定价)
- API 路由注册(10 个端点)
- API 响应格式修复
- 服务部署和验证
⚠️ 待完成:
- Celery Beat 定时任务启动
- AI Service 集成
- Recharge Service 集成
- 性能优化(Redis 缓存)
🎉 积分服务核心功能已成功部署并可用!
文档版本:v1.0
最后更新:2026-01-27