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