|
@@ -3,6 +3,7 @@ from fastapi import APIRouter, Depends, Query
|
|
|
from typing import Any, Union, Optional
|
|
from typing import Any, Union, Optional
|
|
|
import os
|
|
import os
|
|
|
import logging
|
|
import logging
|
|
|
|
|
+from pydantic import ValidationError
|
|
|
from alien_store.api.deps import get_contract_service
|
|
from alien_store.api.deps import get_contract_service
|
|
|
from alien_store.schemas.request.contract_store import TemplatesCreate, SignUrl
|
|
from alien_store.schemas.request.contract_store import TemplatesCreate, SignUrl
|
|
|
from alien_store.schemas.response.contract_store import (
|
|
from alien_store.schemas.response.contract_store import (
|
|
@@ -44,16 +45,42 @@ logger = _init_logger()
|
|
|
|
|
|
|
|
router = APIRouter()
|
|
router = APIRouter()
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+def _format_validation_errors(exc: ValidationError) -> list[dict[str, str]]:
|
|
|
|
|
+ errors = []
|
|
|
|
|
+ for err in exc.errors():
|
|
|
|
|
+ loc = err.get("loc", ())
|
|
|
|
|
+ field = ".".join(str(item) for item in loc if item != "body")
|
|
|
|
|
+ errors.append(
|
|
|
|
|
+ {
|
|
|
|
|
+ "field": field or "body",
|
|
|
|
|
+ "type": err.get("type", "validation_error"),
|
|
|
|
|
+ "message": err.get("msg", "参数校验失败"),
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
|
|
+ return errors
|
|
|
|
|
+
|
|
|
@router.get("/", response_model=ModuleStatusResponse)
|
|
@router.get("/", response_model=ModuleStatusResponse)
|
|
|
async def index() -> ModuleStatusResponse:
|
|
async def index() -> ModuleStatusResponse:
|
|
|
return ModuleStatusResponse(module="Contract", status="Ok")
|
|
return ModuleStatusResponse(module="Contract", status="Ok")
|
|
|
|
|
|
|
|
@router.post("/get_esign_templates", response_model=Union[TemplatesCreateResponse, ErrorResponse])
|
|
@router.post("/get_esign_templates", response_model=Union[TemplatesCreateResponse, ErrorResponse])
|
|
|
async def create_esign_templates(
|
|
async def create_esign_templates(
|
|
|
- templates_data: TemplatesCreate,
|
|
|
|
|
|
|
+ templates_data: dict[str, Any],
|
|
|
templates_server: ContractServer = Depends(get_contract_service)
|
|
templates_server: ContractServer = Depends(get_contract_service)
|
|
|
) -> Union[TemplatesCreateResponse, ErrorResponse]:
|
|
) -> Union[TemplatesCreateResponse, ErrorResponse]:
|
|
|
"""AI审核完调用 e签宝生成文件"""
|
|
"""AI审核完调用 e签宝生成文件"""
|
|
|
|
|
+ try:
|
|
|
|
|
+ templates_data = TemplatesCreate.model_validate(templates_data)
|
|
|
|
|
+ except ValidationError as e:
|
|
|
|
|
+ detail = _format_validation_errors(e)
|
|
|
|
|
+ logger.error("get_esign_templates validation failed: %s", detail)
|
|
|
|
|
+ return ErrorResponse(
|
|
|
|
|
+ success=False,
|
|
|
|
|
+ message="请求参数校验失败",
|
|
|
|
|
+ raw={"errors": detail},
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
logger.info(f"get_esign_templates request: {templates_data}")
|
|
logger.info(f"get_esign_templates request: {templates_data}")
|
|
|
# res_text = fill_in_template(templates_data.merchant_name)
|
|
# res_text = fill_in_template(templates_data.merchant_name)
|
|
|
res_text = fill_in_template(templates_data.store_name)
|
|
res_text = fill_in_template(templates_data.store_name)
|