packlist/backend/routes/dev_seed.py

103 lines
No EOL
3.1 KiB
Python

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],
}