packlist/backend/main.py

50 lines
No EOL
1.4 KiB
Python

from uuid import UUID, uuid4
from fastapi import Depends, FastAPI
from sqlalchemy import select
from backend.schemas import ItemCreate
from models import Base, Item, Tag
from database import engine, get_db
from sqlalchemy.ext.asyncio import AsyncSession
app = FastAPI()
FIXED_USER_ID = UUID("00000000-0000-0000-0000-000000000001")
@app.on_event("startup")
async def startup():
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
@app.get("/")
def read_root():
return {"status": "running"}
@app.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)}
@app.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))
items = result.scalars().all()
return {"items" : [item.name for item in items]}