packlist/backend/routes/items.py

40 lines
No EOL
1.4 KiB
Python

from uuid import uuid4
from fastapi import APIRouter, Depends
from sqlalchemy.ext.asyncio import AsyncSession
from schemas import ItemCreate
from models import Item, Tag
from database import get_db
from sqlalchemy import select
from sqlalchemy.orm import selectinload
from config import FIXED_USER_ID
router = APIRouter()
@router.post("/items/")
async def create_item(item: ItemCreate, db: AsyncSession = Depends(get_db)):
user_id = FIXED_USER_ID
db_item = Item(id=uuid4(), name=item.name, user_id=user_id)
tags = []
for tag_name in item.tag_names:
result = await db.execute(select(Tag).where(Tag.name == tag_name, Tag.user_id == user_id))
tag = result.scalar_one_or_none()
if not tag:
tag = Tag(id=uuid4(), name=tag_name, user_id=user_id)
db.add(tag)
tags.append(tag)
db_item.tags = tags
db.add(db_item)
await db.commit()
return {"status": "item created", "item_id": str(db_item.id)}
@router.get("/items/")
async def read_items(db: AsyncSession = Depends(get_db)):
user_id = FIXED_USER_ID
result = await db.execute(select(Item).where(Item.user_id == user_id).options(selectinload(Item.tags)))
items = result.scalars().all()
for item in items:
print(f"DEBUG: Item {item.id}: {item.name} - Tags: {[tag.name for tag in item.tags]}")
return {"items" : [item.name for item in items]}