router.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from typing import Union
  2. from fastapi import APIRouter, Depends, Query
  3. from alien_contract.api.deps import get_contract_service
  4. from alien_contract.schemas.request.contract import BundleCreateRequest
  5. from alien_contract.schemas.response.contract import (
  6. ModuleStatusResponse,
  7. BundleCreateResponse,
  8. ErrorResponse,
  9. PaginatedBundleResponse,
  10. SuccessResponse,
  11. )
  12. from alien_contract.services.contract_server import ContractCenterService
  13. router = APIRouter()
  14. @router.get("/", response_model=ModuleStatusResponse)
  15. async def index() -> ModuleStatusResponse:
  16. return ModuleStatusResponse(module="ContractCenter", status="Ok")
  17. @router.post("/bundles", response_model=Union[BundleCreateResponse, ErrorResponse])
  18. async def create_bundle(
  19. request: BundleCreateRequest,
  20. service: ContractCenterService = Depends(get_contract_service),
  21. ) -> Union[BundleCreateResponse, ErrorResponse]:
  22. result = await service.create_bundle(request)
  23. if not result.get("success"):
  24. return ErrorResponse(**result)
  25. return BundleCreateResponse(**result)
  26. @router.get("/bundles", response_model=PaginatedBundleResponse)
  27. async def list_bundles(
  28. subject_type: str = Query(...),
  29. subject_id: int = Query(..., gt=0),
  30. page: int = Query(1, ge=1),
  31. page_size: int = Query(10, ge=1, le=100),
  32. service: ContractCenterService = Depends(get_contract_service),
  33. ) -> PaginatedBundleResponse:
  34. result = await service.list_bundles(subject_type, subject_id, page, page_size)
  35. return PaginatedBundleResponse(**result)
  36. @router.get("/documents/{sign_flow_id}", response_model=Union[dict, ErrorResponse])
  37. async def get_document_detail(
  38. sign_flow_id: str,
  39. service: ContractCenterService = Depends(get_contract_service),
  40. ) -> Union[dict, ErrorResponse]:
  41. result = await service.get_document_detail(sign_flow_id)
  42. if not result.get("success", True):
  43. return ErrorResponse(**result)
  44. return result
  45. @router.post("/esign/callback", response_model=Union[SuccessResponse, ErrorResponse])
  46. async def esign_callback(
  47. payload: dict,
  48. service: ContractCenterService = Depends(get_contract_service),
  49. ) -> Union[SuccessResponse, ErrorResponse]:
  50. result = await service.process_esign_callback(payload)
  51. if not result.get("success"):
  52. return ErrorResponse(**result)
  53. return SuccessResponse(code=result["code"], msg=result["msg"])