feat: migrate advisor risk questionnaire

This commit is contained in:
Windows
2026-09-11 12:57:07 +08:00
parent 291cb7b58f
commit acb9175e31
13 changed files with 1106 additions and 18 deletions
+27
View File
@@ -0,0 +1,27 @@
"""Mandatory customer onboarding endpoints."""
from fastapi import APIRouter, Depends, Header, status
from app.api.dependencies.auth import build_request_context
from app.api.schemas.risk_questionnaire import RiskQuestionnaireSubmission
from app.core.contracts import RequestContext
from app.service.risk_questionnaire_service import RiskQuestionnaireService
router = APIRouter(prefix="/api/v1/onboarding", tags=["customer-onboarding"])
@router.get("/risk-questionnaire")
async def get_risk_questionnaire(
context: RequestContext = Depends(build_request_context), # noqa: B008
) -> dict[str, object]:
return await RiskQuestionnaireService().questionnaire(context)
@router.post("/risk-questionnaire/submissions", status_code=status.HTTP_201_CREATED)
async def submit_risk_questionnaire(
payload: RiskQuestionnaireSubmission,
context: RequestContext = Depends(build_request_context), # noqa: B008
key: str | None = Header(default=None, alias="Idempotency-Key"),
) -> dict[str, object]:
return await RiskQuestionnaireService().submit(payload, context, key)
+7
View File
@@ -54,4 +54,11 @@ async def build_request_context(
# 令牌非法、账号停用、角色读取失败一律按 401 处理,形态完全一致。
raise unauthorized() from exc
request.state.request_context = context
if not request.url.path.startswith("/api/v1/onboarding/"):
from app.service.risk_questionnaire_service import RiskQuestionnaireService
if await RiskQuestionnaireService().is_required(context):
from app.core.errors import OnboardingRequiredError
raise OnboardingRequiredError("请先完成开户风险测评问卷")
return context
+6
View File
@@ -0,0 +1,6 @@
"""HTTP DTOs for customer opening risk questionnaires."""
from app.core.risk_questionnaire_contracts import RiskQuestionnaireSubmission
__all__ = ["RiskQuestionnaireSubmission"]