111 lines
3.2 KiB
Python
111 lines
3.2 KiB
Python
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)
|
|
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],
|
|
}
|