Chore: Pushing changes to migrate from windows/wsl to fedora
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
"""The suppliers endpoint
|
||||
"""
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from sqlmodel import select
|
||||
from app.api.deps import SessionDep, exists
|
||||
from app.schemas.models import Supplier
|
||||
from app.schemas.schemas import SupplierCreate, SupplierUpdate
|
||||
from pydantic import ValidationError
|
||||
from typing import Sequence, List, Optional
|
||||
|
||||
|
||||
router = APIRouter(prefix="/suppliers", tags=["suppliers"])
|
||||
|
||||
|
||||
@router.get("/", response_model=List[Supplier])
|
||||
def fetch_suppliers(session: SessionDep) -> Sequence[Supplier]:
|
||||
"""Fetch supplier list
|
||||
"""
|
||||
suppliers = session.exec(select(Supplier)).all()
|
||||
return suppliers
|
||||
|
||||
|
||||
@router.post("/", response_model=SupplierCreate)
|
||||
def create_supplier(supplier_data: SupplierCreate, session: SessionDep) -> Supplier:
|
||||
"""Create a supplier
|
||||
"""
|
||||
existing = exists(session, Supplier, tin_number=supplier_data.tin_number)
|
||||
if existing:
|
||||
raise HTTPException(status_code=400, detail="Supplier with this tin_number already exists")
|
||||
|
||||
try:
|
||||
supplier = Supplier.model_validate(supplier_data)
|
||||
except ValidationError as e:
|
||||
raise HTTPException(status_code=400, detail=e.errors())
|
||||
|
||||
session.add(supplier)
|
||||
session.commit()
|
||||
session.refresh(supplier)
|
||||
return supplier
|
||||
|
||||
|
||||
@router.get("/{supplier_id}", response_model=Supplier)
|
||||
def get_supplier(supplier_id: int, session: SessionDep) -> Optional[Supplier]:
|
||||
"""Returns a supplier by its ID
|
||||
"""
|
||||
stmt = select(Supplier).where(Supplier.id == supplier_id)
|
||||
result: Optional[Supplier] = session.exec(stmt).first()
|
||||
|
||||
if not result:
|
||||
raise HTTPException(status_code=404, detail="Supplier not found")
|
||||
|
||||
return result
|
||||
|
||||
|
||||
@router.patch("/{supplier_id}", response_model=SupplierUpdate)
|
||||
def update_supplier(
|
||||
supplier_id: int,
|
||||
supplier_data: SupplierUpdate,
|
||||
session: SessionDep
|
||||
) -> Optional[Supplier]:
|
||||
"""Updates a supplier's details
|
||||
"""
|
||||
supplier = session.get(Supplier, supplier_id)
|
||||
if not supplier:
|
||||
raise HTTPException(status_code=404, detail="Supplier not found")
|
||||
|
||||
updated_fields = supplier_data.model_dump(exclude_unset=True)
|
||||
|
||||
for key, value in updated_fields.items():
|
||||
setattr(supplier, key, value)
|
||||
|
||||
session.add(supplier)
|
||||
session.commit()
|
||||
session.refresh(supplier)
|
||||
return supplier
|
||||
|
||||
|
||||
@router.delete("/{supplier_id}", status_code=204)
|
||||
def delete_supplier(supplier_id: int, session: SessionDep):
|
||||
"""Deletes a supplier
|
||||
"""
|
||||
supplier = session.get(Supplier, supplier_id)
|
||||
|
||||
if not supplier:
|
||||
raise HTTPException(status_code=404, detail="Supplier not found")
|
||||
|
||||
session.delete(supplier)
|
||||
session.commit()
|
||||
Reference in New Issue
Block a user