c53ce896f7
华为应用市场审核要求新手引导的「快速设置」权限步必须可被用户关闭,平时又要 保住权限开启率,故做成后台可切的两态开关,送审期间切开、过审后收回。 - app_config 新增 huawei_review 行(default / review),空库与脏值一律回退 default = 上线至今的现状,宁可不给退出按钮也不误放开 - admin: GET/PATCH /admin/api/huawei-review,权限 operator/tech,切换写审计 - 客户端: GET /api/v1/platform/huawei-review 不鉴权(引导页在登录前就展示), 下发 onboarding_closable;机型 gate 由客户端做,故此处不判 ROM Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: 左辰勇 <exinglang@gmail.com> Reviewed-on: #147 Co-authored-by: zuochenyong <zuochenyong@wonderable.ai> Co-committed-by: zuochenyong <zuochenyong@wonderable.ai>
59 lines
2.2 KiB
Python
59 lines
2.2 KiB
Python
"""admin 华为审核开关:控制新手引导页(快速设置)在华为 ROM 客户端能否被用户关闭。
|
|
|
|
存在 app_config 表的 huawei_review dict(见 repositories/app_config.get_huawei_review/set_huawei_review)。
|
|
客户端经 /api/v1/platform/huawei-review 拉取(且只有华为 ROM 机型会去拉)。权限 operator/tech + 审计。
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from typing import Annotated
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, Request
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.admin.audit import write_audit
|
|
from app.admin.deps import AdminDb, get_client_ip, get_current_admin, require_role
|
|
from app.admin.schemas.huawei_review import HuaweiReviewOut, HuaweiReviewUpdate
|
|
from app.models.admin import AdminUser
|
|
from app.models.app_config import AppConfig
|
|
from app.repositories import app_config
|
|
|
|
router = APIRouter(
|
|
prefix="/admin/api/huawei-review",
|
|
tags=["admin-huawei-review"],
|
|
dependencies=[Depends(get_current_admin)],
|
|
)
|
|
|
|
|
|
def _out(db: Session) -> HuaweiReviewOut:
|
|
row = db.get(AppConfig, app_config.HUAWEI_REVIEW_KEY)
|
|
return HuaweiReviewOut(
|
|
mode=app_config.get_huawei_review(db)["mode"],
|
|
updated_at=row.updated_at.isoformat() if row is not None else None,
|
|
)
|
|
|
|
|
|
@router.get("", response_model=HuaweiReviewOut, summary="华为审核开关当前状态")
|
|
def get_huawei_review(db: AdminDb) -> HuaweiReviewOut:
|
|
return _out(db)
|
|
|
|
|
|
@router.patch("", response_model=HuaweiReviewOut, summary="切换华为审核开关(带审计)")
|
|
def update_huawei_review(
|
|
body: HuaweiReviewUpdate,
|
|
request: Request,
|
|
admin: Annotated[AdminUser, Depends(require_role("operator", "tech"))],
|
|
db: AdminDb,
|
|
) -> HuaweiReviewOut:
|
|
before = app_config.get_huawei_review(db)["mode"]
|
|
try:
|
|
app_config.set_huawei_review(db, body.mode, admin_id=admin.id, commit=False)
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=400, detail=str(e)) from e
|
|
write_audit(
|
|
db, admin, action="huawei_review.set", target_type="huawei_review",
|
|
target_id=app_config.HUAWEI_REVIEW_KEY,
|
|
detail={"before": before, "after": body.mode}, ip=get_client_ip(request), commit=False,
|
|
)
|
|
db.commit()
|
|
return _out(db)
|