2025-12-10 12:02:17 +08:00

51 lines
1.9 KiB
Python

from typing import List
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.ext.asyncio import AsyncSession
from backend.api.deps import AuthUser, require_admin
from backend.db.session import get_session
from backend.modules.customers.schemas import CustomerCreate, CustomerOut, CustomerUpdate
from backend.modules.customers.service import create_customer, list_customers, update_customer, delete_customer
router = APIRouter(prefix="/api/v1/customers", tags=["customers"])
@router.get("", response_model=List[CustomerOut])
async def get_customers(
session: AsyncSession = Depends(get_session),
auth_user: AuthUser = Depends(require_admin),
) -> List[CustomerOut]:
customers = await list_customers(session)
return [CustomerOut.model_validate(c) for c in customers]
@router.post("", response_model=CustomerOut, status_code=status.HTTP_201_CREATED)
async def create_customer_endpoint(
payload: CustomerCreate,
session: AsyncSession = Depends(get_session),
auth_user: AuthUser = Depends(require_admin),
) -> CustomerOut:
customer = await create_customer(session, payload.model_dump(), auth_user.user)
return CustomerOut.model_validate(customer)
@router.put("/{customer_id}", response_model=CustomerOut)
async def update_customer_endpoint(
customer_id: int,
payload: CustomerUpdate,
session: AsyncSession = Depends(get_session),
auth_user: AuthUser = Depends(require_admin),
) -> CustomerOut:
customer = await update_customer(session, customer_id, payload.model_dump(exclude_unset=True), auth_user.user)
return CustomerOut.model_validate(customer)
@router.delete("/{customer_id}", status_code=status.HTTP_204_NO_CONTENT)
async def delete_customer_endpoint(
customer_id: int,
session: AsyncSession = Depends(get_session),
auth_user: AuthUser = Depends(require_admin),
):
await delete_customer(session, customer_id, auth_user.user)