Files
group_xinghuo_jinrong/app/api/kyc.py
T

78 lines
2.3 KiB
Python

"""KYC API skeleton."""
from __future__ import annotations
from fastapi import APIRouter, Depends, Request
from app.api.deps import get_auth_context, require_permission
from app.model.schemas import ApiResponse, AuthContext, KycChatRequest, KycSessionCreate
from app.service.kyc_session_service import KycSessionService
from app.utils.response import success_response
router = APIRouter()
AUTH_CONTEXT_DEP = Depends(get_auth_context)
KYC_CREATE_DEP = Depends(require_permission("kyc:create"))
KYC_READ_DEP = Depends(require_permission("kyc:chat"))
KYC_CHAT_DEP = Depends(require_permission("kyc:chat"))
KYC_COMPLETE_DEP = Depends(require_permission("kyc:complete"))
kyc_session_service = KycSessionService()
@router.get("/ping")
def ping(request: Request, auth: AuthContext = AUTH_CONTEXT_DEP):
return success_response(request, {"module": "kyc", "status": "ready"})
@router.post("/sessions", response_model=ApiResponse)
def create_kyc_session(
request: Request,
payload: KycSessionCreate,
auth: AuthContext = KYC_CREATE_DEP,
):
result = kyc_session_service.create_session(
payload,
auth=auth,
trace_id=request.state.trace_id,
)
return success_response(request, result.model_dump(mode="json"))
@router.get("/sessions/{session_id}", response_model=ApiResponse)
def get_kyc_session(
session_id: str,
request: Request,
auth: AuthContext = KYC_READ_DEP,
):
result = kyc_session_service.get_session(session_id, auth=auth)
return success_response(request, result.model_dump(mode="json"))
@router.post("/sessions/{session_id}/chat", response_model=ApiResponse)
def chat_kyc_session(
session_id: str,
request: Request,
payload: KycChatRequest,
auth: AuthContext = KYC_CHAT_DEP,
):
result = kyc_session_service.chat_session(
session_id,
payload,
auth=auth,
trace_id=request.state.trace_id,
)
return success_response(request, result.model_dump(mode="json"))
@router.post("/sessions/{session_id}/complete", response_model=ApiResponse)
def complete_kyc_session(
session_id: str,
request: Request,
auth: AuthContext = KYC_COMPLETE_DEP,
):
result = kyc_session_service.complete_session(
session_id,
auth=auth,
trace_id=request.state.trace_id,
)
return success_response(request, result.model_dump(mode="json"))