from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from uuid import uuid4 from datetime import date, timedelta from backend.database import get_db from backend import models from backend.crud import generate_trip_items router = APIRouter(tags=["dev"]) @router.get("/dev/seed") def dev_seed(db: Session = Depends(get_db)): # Create demo user user = db.query(models.User).first() if not user: user = models.User(id=uuid4(), name="Demo") db.add(user) db.flush() # Tags tag_names = ["jari", "kristin", "felix", "auto", "sommer"] name_to_tag = {} for name in tag_names: existing = db.query(models.Tag).filter(models.Tag.user_id==user.id, models.Tag.name==name).first() if existing: name_to_tag[name] = existing else: t = models.Tag(id=uuid4(), user_id=user.id, name=name) db.add(t) db.flush() name_to_tag[name] = t # Items (based on your original example) items = [ ("Kinderwagen", ["jari"]), ("Babyschale mit Sonnenschutz", ["jari", "auto"]), ("Alle Schnuller", ["jari"]), ("Sonnencreme", ["sommer"]), ("Ladekabel Handy", []), ("Ladekabel Mac", ["kristin"]), ("Sonnenbrillen", ["sommer"]), ("Schlafsack für {nights} Nächte", ["jari"]), ("{days} x Vitamin D3", ["jari"]), ("{days * 10} Windeln", ["jari"]), ("{days} Unterhosen", ["felix", "kristin"]), ("Badesachen", ["felix", "kristin"]), ] for name, tags in items: existing = db.query(models.Item).filter(models.Item.user_id==user.id, models.Item.name==name).first() if existing: item = existing else: item = models.Item(id=uuid4(), user_id=user.id, name=name) db.add(item) db.flush() # link tags for tag_name in tags: tag = name_to_tag[tag_name] link = db.query(models.ItemTag).filter_by(item_id=item.id, tag_id=tag.id).first() if not link: db.add(models.ItemTag(item_id=item.id, tag_id=tag.id)) db.flush() # Demo trip trip = models.Trip( id=uuid4(), user_id=user.id, name="Ostsee August 2025", start_date=date(2025, 8, 18), end_date=date(2025, 8, 20), ) db.add(trip) db.flush() selected = [name_to_tag[n].id for n in ["jari", "felix", "kristin", "auto"]] marked = [name_to_tag[n].id for n in ["kristin", "felix"]] for tid in selected: db.add(models.TripTagSelected(trip_id=trip.id, tag_id=tid)) for tid in marked: db.add(models.TripTagMarked(trip_id=trip.id, tag_id=tid)) db.flush() created_ids, _ = generate_trip_items(db, trip=trip, selected_tag_ids=selected, marked_tag_ids=marked) db.commit() return { "user_id": str(user.id), "trip_id": str(trip.id), "selected_tag_ids": [str(x) for x in selected], "marked_tag_ids": [str(x) for x in marked], "created_trip_item_ids": [str(x) for x in created_ids], }