Download apps/contracts/api/contract_api.py from jun2024/fachuan: direct link, hf CLI and curl.
- Browser
- Download file 4.77 kB
-
https://huggingface.co/spaces/jun2024/fachuan/resolve/main/apps/contracts/api/contract_api.py
- Command line
-
hf download hf://spaces/jun2024/fachuan/apps/contracts/api/contract_api.py
-
curl -L -o contract_api.py https://huggingface.co/spaces/jun2024/fachuan/resolve/main/apps/contracts/api/contract_api.py
4.77 kB
| from __future__ import annotations | |
| import logging | |
| from typing import Any | |
| from django.http import HttpRequest | |
| from ninja import Router | |
| from apps.contracts.schemas import ( | |
| ContractAssignmentOut, | |
| ContractIn, | |
| ContractOut, | |
| ContractPartySourceOut, | |
| ContractPaymentIn, | |
| ContractUpdate, | |
| UpdateLawyersIn, | |
| ) | |
| from apps.core.dto.request_context import extract_request_context | |
| logger = logging.getLogger("apps.contracts.api") | |
| router = Router() | |
| def _get_contract_service() -> Any: | |
| from apps.contracts.services.contract.wiring import get_contract_service | |
| return get_contract_service() | |
| def _get_domain_service() -> Any: | |
| from apps.contracts.services.contract.wiring import get_contract_domain_service | |
| return get_contract_domain_service() | |
| def list_contracts( | |
| request: HttpRequest, | |
| case_type: str | None = None, | |
| status: str | None = None, | |
| page: int = 1, | |
| page_size: int = 20, | |
| ) -> Any: | |
| """ | |
| 获取合同列表(分页) | |
| Requirements: 6.1, 6.2, 6.3 | |
| """ | |
| service = _get_domain_service() | |
| ctx = extract_request_context(request) | |
| result = service.list_contracts( | |
| case_type=case_type, | |
| status=status, | |
| user=ctx.user, | |
| org_access=ctx.org_access, | |
| perm_open_access=ctx.perm_open_access, | |
| ) | |
| # list_contracts 返回 dict(含分页),前端做客户端分页所以只返回 items | |
| return result["items"] if isinstance(result, dict) else result | |
| class ContractWithCasesIn(ContractIn): | |
| cases: list[dict[str, Any]] | None = None | |
| def create_contract_with_cases(request: HttpRequest, payload: ContractWithCasesIn) -> Any: | |
| service = _get_domain_service() | |
| data = payload.model_dump() | |
| cases_data = data.pop("cases", None) | |
| lawyer_ids = data.pop("lawyer_ids", []) | |
| return service.create_contract_with_cases( | |
| contract_data=data, | |
| cases_data=cases_data, | |
| assigned_lawyer_ids=lawyer_ids, | |
| ) | |
| def get_contract(request: HttpRequest, contract_id: int) -> Any: | |
| """ | |
| 获取合同详情 | |
| Requirements: 6.1, 6.2, 6.3 | |
| """ | |
| service = _get_domain_service() | |
| ctx = extract_request_context(request) | |
| return service.get_contract( | |
| contract_id=contract_id, | |
| user=ctx.user, | |
| org_access=ctx.org_access, | |
| perm_open_access=ctx.perm_open_access, | |
| ) | |
| def update_contract( | |
| request: HttpRequest, | |
| contract_id: int, | |
| payload: ContractUpdate, | |
| sync_cases: bool = False, | |
| confirm_finance: bool = False, | |
| new_payments: list[ContractPaymentIn] | None = None, | |
| ) -> Any: | |
| service = _get_domain_service() | |
| ctx = extract_request_context(request) | |
| data = payload.model_dump(exclude_unset=True) | |
| return service.update_contract_with_finance( | |
| contract_id=contract_id, | |
| update_data=data, | |
| user=ctx.user, | |
| confirm_finance=confirm_finance, | |
| new_payments=[p.model_dump() for p in new_payments] if new_payments else None, | |
| ) | |
| def create_contract( | |
| request: HttpRequest, | |
| payload: ContractIn, | |
| payments: list[ContractPaymentIn] | None = None, | |
| confirm_finance: bool = False, | |
| ) -> Any: | |
| service = _get_domain_service() | |
| ctx = extract_request_context(request) | |
| data = payload.model_dump() | |
| lawyer_ids = data.pop("lawyer_ids", []) | |
| return service.create_contract_with_cases( | |
| contract_data=data, | |
| cases_data=None, | |
| assigned_lawyer_ids=lawyer_ids, | |
| payments_data=[p.model_dump() for p in payments] if payments else None, | |
| confirm_finance=confirm_finance, | |
| user=ctx.user, | |
| ) | |
| def update_contract_lawyers(request: HttpRequest, contract_id: int, payload: UpdateLawyersIn) -> Any: | |
| service = _get_domain_service() | |
| assignments = service.update_contract_lawyers(contract_id=contract_id, lawyer_ids=payload.lawyer_ids) | |
| return [ContractAssignmentOut.from_assignment(item) for item in assignments] | |
| def delete_contract(request: HttpRequest, contract_id: int) -> dict[str, bool]: | |
| service = _get_domain_service() | |
| service.delete_contract(contract_id) | |
| return {"success": True} | |
| def get_contract_all_parties(request: HttpRequest, contract_id: int) -> Any: | |
| service = _get_domain_service() | |
| return service.get_all_parties(contract_id) | |