66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
from fastapi import APIRouter, Depends, Query
|
|
from sqlalchemy.orm import Session
|
|
|
|
from backend.app.core.error_codes import ErrorCode
|
|
from backend.app.core.exceptions import AppException
|
|
from backend.app.db import get_db_session
|
|
from backend.app.schemas.common import success_payload
|
|
from backend.app.schemas.customers import CreateCustomerRequest
|
|
from backend.app.services.customer_service import customer_service
|
|
|
|
router = APIRouter(prefix="/api/customers", tags=["customers"])
|
|
|
|
|
|
@router.get("")
|
|
def list_customers(
|
|
customer_name: str | None = Query(default=None),
|
|
mobile: str | None = Query(default=None),
|
|
customer_type: str | None = Query(default=None),
|
|
settlement_type: str | None = Query(default=None),
|
|
salesman_id: int | None = Query(default=None),
|
|
page_no: int = Query(default=1),
|
|
page_size: int = Query(default=20),
|
|
session: Session = Depends(get_db_session),
|
|
) -> dict:
|
|
result = customer_service.list_customers(
|
|
session,
|
|
{
|
|
"customer_name": customer_name,
|
|
"mobile": mobile,
|
|
"customer_type": customer_type,
|
|
"settlement_type": settlement_type,
|
|
"salesman_id": salesman_id,
|
|
},
|
|
)
|
|
start = max(page_no - 1, 0) * page_size
|
|
result["list"] = result["list"][start : start + page_size]
|
|
result["page_no"] = page_no
|
|
result["page_size"] = page_size
|
|
return success_payload(result)
|
|
|
|
|
|
@router.post("")
|
|
def create_customer(
|
|
payload: CreateCustomerRequest,
|
|
session: Session = Depends(get_db_session),
|
|
) -> dict:
|
|
return success_payload(
|
|
customer_service.create_customer(
|
|
session=session,
|
|
payload=payload.model_dump(),
|
|
)
|
|
)
|
|
|
|
|
|
@router.get("/{customer_id}")
|
|
def get_customer(customer_id: int, session: Session = Depends(get_db_session)) -> dict:
|
|
customer = customer_service.get_customer(customer_id, session)
|
|
if not customer:
|
|
raise AppException(code=ErrorCode.NOT_FOUND, message="客户不存在", status_code=404)
|
|
return success_payload(customer)
|
|
|
|
|
|
@router.post("/import")
|
|
def import_customers() -> dict:
|
|
return success_payload(customer_service.import_customers())
|