router.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from typing import Optional, Union, Literal
  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. """创建合同包"""
  23. result = await service.create_bundle(request)
  24. if not result.get("success"):
  25. return ErrorResponse(**result)
  26. return BundleCreateResponse(**result)
  27. @router.get("/bundles", response_model=PaginatedBundleResponse)
  28. async def list_bundles(
  29. subject_type: Literal["store", "lawyer"] = Query(...),
  30. subject_id: int = Query(..., gt=0),
  31. status: Optional[int] = Query(None, ge=0, le=1, description="文档签署状态过滤: 0=未签署, 1=已签署"),
  32. page: int = Query(1, ge=1),
  33. page_size: int = Query(10, ge=1, le=100),
  34. service: ContractCenterService = Depends(get_contract_service),
  35. ) -> PaginatedBundleResponse:
  36. """"查询合同列表"""
  37. result = await service.list_bundles(subject_type, subject_id, page, page_size, doc_status=status)
  38. return PaginatedBundleResponse(**result)
  39. @router.get("/documents/{sign_flow_id}", response_model=Union[dict, ErrorResponse])
  40. async def get_document_detail(
  41. sign_flow_id: str,
  42. service: ContractCenterService = Depends(get_contract_service),
  43. ) -> Union[dict, ErrorResponse]:
  44. """查询合同详情"""
  45. result = await service.get_document_detail(sign_flow_id)
  46. if not result.get("success", True):
  47. return ErrorResponse(**result)
  48. return result
  49. @router.post("/esign/callback", response_model=Union[SuccessResponse, ErrorResponse])
  50. async def esign_callback(
  51. payload: dict,
  52. service: ContractCenterService = Depends(get_contract_service),
  53. ) -> Union[SuccessResponse, ErrorResponse]:
  54. """e签宝回调"""
  55. result = await service.process_esign_callback(payload)
  56. if not result.get("success"):
  57. return ErrorResponse(**result)
  58. return SuccessResponse(code=result["code"], msg=result["msg"])