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

积分服务部署完成

日期: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.sql
  • server/app/migrations/sql/001_create_trigger_function.sql
  • server/app/migrations/sql/009_credit_service_tables.sql
  • server/app/migrations/009_credit_service_tables.py
  • server/app/migrations/init_credit_data.py

核心代码

  • server/app/models/credit.py
  • server/app/repositories/credit_repository.py
  • server/app/services/credit_service.py
  • server/app/schemas/credit.py
  • server/app/api/v1/credits.py
  • server/app/tasks/credit_tasks.py

文档

  • docs/server/changelogs/2026-01-27-credit-service-implementation.md
  • docs/server/changelogs/2026-01-27-credit-service-deployment.md

修改文件(5 个)

  • server/app/core/exceptions.py - 新增 InsufficientCreditsError
  • server/app/api/v1/router.py - 注册 credits 路由
  • server/app/tasks/celery_app.py - 注册定时任务
  • server/app/models/__init__.py - 导出 Credit Models
  • server/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