2025-05-23 09:51:10 +00:00

105 lines
2.5 KiB
Python

"""
Items API endpoints.
"""
from typing import Any, List
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from app import crud, schemas
from app.db.database import get_db
router = APIRouter()
@router.get("/", response_model=List[schemas.Item], summary="Get items")
def read_items(
db: Session = Depends(get_db),
skip: int = 0,
limit: int = 100,
active_only: bool = False,
) -> Any:
"""
Retrieve items.
"""
if active_only:
items = crud.item.get_active(db, skip=skip, limit=limit)
else:
items = crud.item.get_multi(db, skip=skip, limit=limit)
return items
@router.post("/", response_model=schemas.Item, status_code=status.HTTP_201_CREATED, summary="Create item")
def create_item(
*,
db: Session = Depends(get_db),
item_in: schemas.ItemCreate,
) -> Any:
"""
Create new item.
"""
item = crud.item.get_by_name(db, name=item_in.name)
if item:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Item with this name already exists",
)
item = crud.item.create(db, obj_in=item_in)
return item
@router.get("/{id}", response_model=schemas.Item, summary="Get item by ID")
def read_item(
*,
db: Session = Depends(get_db),
id: int,
) -> Any:
"""
Get item by ID.
"""
item = crud.item.get(db, id=id)
if not item:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Item not found",
)
return item
@router.put("/{id}", response_model=schemas.Item, summary="Update item")
def update_item(
*,
db: Session = Depends(get_db),
id: int,
item_in: schemas.ItemUpdate,
) -> Any:
"""
Update an item.
"""
item = crud.item.get(db, id=id)
if not item:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Item not found",
)
item = crud.item.update(db, db_obj=item, obj_in=item_in)
return item
@router.delete("/{id}", status_code=status.HTTP_204_NO_CONTENT, response_model=None, summary="Delete item")
def delete_item(
*,
db: Session = Depends(get_db),
id: int,
) -> None:
"""
Delete an item.
"""
item = crud.item.get(db, id=id)
if not item:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Item not found",
)
crud.item.remove(db, id=id)
return None