from datetime import date from typing import List from uuid import UUID, uuid4 from fastapi import Depends, FastAPI from pydantic import BaseModel from sqlalchemy import select 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"} class TagCreate(BaseModel): name: str class ItemCreate(BaseModel): name: str tag_names: List[str] class TripCreate(BaseModel): name: str start_date: date end_date: date selected_tags: List[str] marked_tags: List[str] @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]}