from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from uuid import uuid4 from datetime import date 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: tag = ( db.query(models.Tag) .filter(models.Tag.user_id == user.id, models.Tag.name == name) .first() ) if not tag: tag = models.Tag( id=uuid4(), user_id=user.id, name=name, mandatory=(name == "sommer") ) db.add(tag) db.flush() name_to_tag[name] = tag # Items with tags 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, tag_names_list in items: item = ( db.query(models.Item) .filter(models.Item.user_id == user.id, models.Item.name == name) .first() ) if not item: item = models.Item(id=uuid4(), user_id=user.id, name=name) db.add(item) db.flush() for tag_name in tag_names_list: tag = name_to_tag[tag_name] if tag not in item.tags: item.tags.append(tag) db.flush() # Demo trip with tag selections trip = ( db.query(models.Trip) .filter(models.Trip.user_id == user.id, models.Trip.name == "Ostsee August 2025") .first() ) if not 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() # Set selected and marked tags using relationships selected_tags = [name_to_tag[n] for n in ["jari", "felix", "kristin", "auto"]] marked_tags = [name_to_tag[n] for n in ["kristin", "felix"]] trip.selected_tags = selected_tags trip.marked_tags = marked_tags db.flush() created_ids, _ = generate_trip_items( db, trip=trip, selected_tag_ids=[t.id for t in selected_tags], marked_tag_ids=[t.id for t in marked_tags] ) db.commit() return { "user_id": str(user.id), "trip_id": str(trip.id), "selected_tag_ids": [str(t.id) for t in selected_tags], "marked_tag_ids": [str(t.id) for t in marked_tags], "created_trip_item_ids": [str(x) for x in created_ids], }