packlist/backend/routes/dev_seed.py

116 lines
3.3 KiB
Python

from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from uuid import uuid4
from datetime import date
from database import get_db
import models
from 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],
}