Add routes for updating and showing single items
This commit is contained in:
parent
33329b7d03
commit
9dc1241728
1 changed files with 52 additions and 5 deletions
|
|
@ -1,10 +1,10 @@
|
|||
from uuid import uuid4
|
||||
from fastapi import APIRouter, Depends
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
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 import select, update
|
||||
from sqlalchemy.orm import selectinload
|
||||
from config import FIXED_USER_ID
|
||||
|
||||
|
|
@ -35,6 +35,53 @@ 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]}
|
||||
return {
|
||||
"items": [
|
||||
{
|
||||
"id": str(item.id),
|
||||
"name": item.name,
|
||||
"tags": [tag.name for tag in item.tags]
|
||||
}
|
||||
for item in items
|
||||
]
|
||||
}
|
||||
|
||||
@router.put("/items/{item_id}")
|
||||
async def update_item(item_id: str, item: ItemCreate, db: AsyncSession = Depends(get_db)):
|
||||
user_id = FIXED_USER_ID
|
||||
|
||||
result = await db.execute(select(Item).where(Item.id == item_id, Item.user_id == user_id).options(selectinload(Item.tags)))
|
||||
db_item = result.scalar_one_or_none()
|
||||
if not db_item:
|
||||
raise HTTPException(status_code=404, detail="Item not found")
|
||||
|
||||
db_item.name = item.name
|
||||
|
||||
# Update tags
|
||||
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
|
||||
|
||||
await db.commit()
|
||||
return {"status": "item updated", "item_id": str(db_item.id)}
|
||||
|
||||
@router.get("/items/{item_id}")
|
||||
async def get_item(item_id: str, db: AsyncSession = Depends(get_db)):
|
||||
user_id = FIXED_USER_ID
|
||||
result = await db.execute(
|
||||
select(Item).where(Item.id == item_id, Item.user_id == user_id).options(selectinload(Item.tags))
|
||||
)
|
||||
db_item = result.scalar_one_or_none()
|
||||
if not db_item:
|
||||
raise HTTPException(status_code=404, detail="Item not found")
|
||||
return {
|
||||
"id": str(db_item.id),
|
||||
"name": db_item.name,
|
||||
"tags": [tag.name for tag in db_item.tags]
|
||||
}
|
||||
Loading…
Reference in a new issue