40 lines
No EOL
1.4 KiB
Python
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]} |