Chore: Pushing changes to migrate from windows/wsl to fedora

This commit is contained in:
2025-07-25 21:27:16 +02:00
parent e60489715a
commit b0f9685a0a
16 changed files with 442 additions and 19 deletions
+88
View File
@@ -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()