78 lines
2.3 KiB
Python
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"))
|