style: auto-format with black + isort + ruff + prettier [skip ci-format-check]
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 5s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 47s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 47s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m7s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m5s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 3m31s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 3m42s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 4m40s
AI Code Review / AI Code Review (pull_request) Successful in 6m33s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 7m51s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 11m50s
CI/CD Pipeline / CI Gate (pull_request) Successful in 5s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 8m23s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 52s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m5s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 6h6m56s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 6h18m35s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 6h18m44s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 6h6m0s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 6h17m56s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 6h17m57s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 6h17m47s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 6h17m50s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 6h17m52s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 6h17m54s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 6h17m54s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 6h17m55s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 6h18m2s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 6h6m4s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 6h5m59s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 6h6m4s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 6h17m43s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 6h17m44s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 6h17m57s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 5s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 47s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 47s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m7s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m5s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 3m31s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 3m42s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 4m40s
AI Code Review / AI Code Review (pull_request) Successful in 6m33s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 7m51s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 11m50s
CI/CD Pipeline / CI Gate (pull_request) Successful in 5s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 8m23s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 52s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m5s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 6h6m56s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 6h18m35s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 6h18m44s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 6h6m0s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 6h17m56s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 6h17m57s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 6h17m47s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 6h17m50s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 6h17m52s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 6h17m54s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 6h17m54s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 6h17m55s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 6h18m2s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 6h6m4s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 6h5m59s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 6h6m4s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 6h17m43s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 6h17m44s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 6h17m57s
This commit is contained in:
@@ -36,9 +36,9 @@ from fastapi import APIRouter, Depends, HTTPException, Query
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from packages.domain.points_rules import (
|
||||
MEMBERSHIP_PRICES,
|
||||
FREE_USER_MULTIPLIER,
|
||||
MEMBER_DISCOUNT,
|
||||
MEMBERSHIP_PRICES,
|
||||
POINTS_PACKAGES,
|
||||
POINTS_SCENES,
|
||||
calculate_points_cost,
|
||||
|
||||
@@ -142,7 +142,9 @@ class PointsOrderResponse(BaseModel):
|
||||
amount_cents: int
|
||||
points_amount: int = Field(0, description="本次充值/购买可获得的积分(仅 points 类型订单有意义)")
|
||||
status: str
|
||||
pay_params: dict[str, Any] = Field(default_factory=dict, description="拉起支付所需参数(payment_url/prepay_id 等),支付通道接入后填充")
|
||||
pay_params: dict[str, Any] = Field(
|
||||
default_factory=dict, description="拉起支付所需参数(payment_url/prepay_id 等),支付通道接入后填充"
|
||||
)
|
||||
expire_at: Optional[str] = Field(None, description="订单过期时间(ISO 8601),默认创建后 48 小时")
|
||||
created_at: Optional[str] = None
|
||||
|
||||
|
||||
@@ -8,7 +8,12 @@ import math
|
||||
# 每个场景: base_points(基础积分), unit(计费单位), name(显示名称)
|
||||
|
||||
POINTS_SCENES: dict[str, dict] = {
|
||||
"ai_voice": {"base_points": 1, "unit": "分钟", "name": "AI 配音", "description": "AI 配音每分钟消耗 1 积分(免费用户上浮 15%,会员 8~9 折)"},
|
||||
"ai_voice": {
|
||||
"base_points": 1,
|
||||
"unit": "分钟",
|
||||
"name": "AI 配音",
|
||||
"description": "AI 配音每分钟消耗 1 积分(免费用户上浮 15%,会员 8~9 折)",
|
||||
},
|
||||
"ai_video": {
|
||||
"base_points": 3,
|
||||
"unit": "条",
|
||||
@@ -16,12 +21,37 @@ POINTS_SCENES: dict[str, dict] = {
|
||||
"extra_per_30s": 1,
|
||||
"description": "智能混剪每条 3 积分起,视频超过 30 秒后每 30 秒加 1 积分;免费用户每日 2 条免费额度",
|
||||
},
|
||||
"ai_digital_human": {"base_points": 15, "unit": "分钟", "name": "AI 数字人", "description": "AI 数字人每分钟消耗 15 积分"},
|
||||
"voice_clone_train": {"base_points": 0, "unit": "次", "name": "声音克隆训练", "description": "声音克隆训练免费(每用户限 1 个声音)"},
|
||||
"voice_clone_synth": {"base_points": 1, "unit": "分钟", "name": "声音克隆合成", "description": "克隆音色合成每分钟消耗 1 积分"},
|
||||
"douyin_extract": {"base_points": 1, "unit": "次", "name": "抖音链接提取", "description": "抖音文案提取每次 1 积分"},
|
||||
"ai_digital_human": {
|
||||
"base_points": 15,
|
||||
"unit": "分钟",
|
||||
"name": "AI 数字人",
|
||||
"description": "AI 数字人每分钟消耗 15 积分",
|
||||
},
|
||||
"voice_clone_train": {
|
||||
"base_points": 0,
|
||||
"unit": "次",
|
||||
"name": "声音克隆训练",
|
||||
"description": "声音克隆训练免费(每用户限 1 个声音)",
|
||||
},
|
||||
"voice_clone_synth": {
|
||||
"base_points": 1,
|
||||
"unit": "分钟",
|
||||
"name": "声音克隆合成",
|
||||
"description": "克隆音色合成每分钟消耗 1 积分",
|
||||
},
|
||||
"douyin_extract": {
|
||||
"base_points": 1,
|
||||
"unit": "次",
|
||||
"name": "抖音链接提取",
|
||||
"description": "抖音文案提取每次 1 积分",
|
||||
},
|
||||
"ai_rewrite": {"base_points": 1, "unit": "次", "name": "AI 改写文案", "description": "AI 改写文案每次 1 积分"},
|
||||
"ai_title": {"base_points": 1, "unit": "次", "name": "AI 标题生成", "description": "AI 生成标题每次 1 积分(免费用户实际上浮后 2 积分/次)"},
|
||||
"ai_title": {
|
||||
"base_points": 1,
|
||||
"unit": "次",
|
||||
"name": "AI 标题生成",
|
||||
"description": "AI 生成标题每次 1 积分(免费用户实际上浮后 2 积分/次)",
|
||||
},
|
||||
"ai_cover": {"base_points": 1, "unit": "张", "name": "AI 封面生成", "description": "AI 封面生成每张 1 积分"},
|
||||
}
|
||||
|
||||
|
||||
@@ -181,6 +181,7 @@ class TestMultiplierConsistency:
|
||||
"""check 端点 required_points 与 calculate_points_cost 结果一致。"""
|
||||
from app.api.routes.points import check_points
|
||||
from app.schemas.points import PointsCheckRequest
|
||||
|
||||
from packages.domain.points_rules import calculate_points_cost
|
||||
|
||||
svc = MagicMock()
|
||||
|
||||
Reference in New Issue
Block a user