51 lines
1.9 KiB
Python
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)
|