from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session, joinedload from uuid import UUID from backend.database import get_db from backend import models from backend.schemas import ItemCreate, ItemOut router = APIRouter(prefix="/items", tags=["items"]) @router.get("/", response_model=list[ItemOut]) def list_items(db: Session = Depends(get_db)): items = db.query(models.Item).options(joinedload(models.Item.tags)).all() return items @router.post("/", response_model=ItemOut) def create_item(payload: ItemCreate, db: Session = Depends(get_db)): # Demo: use first user or create one if none exists user = db.query(models.User).first() if not user: from uuid import uuid4 user = models.User(id=uuid4(), name="Demo") db.add(user) db.flush() # Create the item item = models.Item(user_id=user.id, name=payload.name) # Attach tags if provided if payload.tag_ids: tags = ( db.query(models.Tag) .filter(models.Tag.id.in_(payload.tag_ids), models.Tag.user_id == user.id) .all() ) item.tags.extend(tags) db.add(item) db.commit() db.refresh(item) return item @router.delete("/{item_id}", status_code=204) def delete_item(item_id: UUID, db: Session = Depends(get_db)): item = db.get(models.Item, item_id) if not item: raise HTTPException(status_code=404, detail="Item not found") db.delete(item) db.commit()