feat: always regenerate all trips items after modifications

This commit is contained in:
Felix Zett 2025-09-14 20:11:27 +02:00
parent 1135f3b7a8
commit 566c1cc125

View file

@ -4,6 +4,7 @@ from uuid import UUID
from backend.database import get_db
from backend import models
from backend.schemas import ItemCreate, ItemOut, TagIdPayload, TagOut
from backend.crud import generate_trip_items
router = APIRouter(prefix="/items", tags=["items"])
@ -14,6 +15,18 @@ def list_items(db: Session = Depends(get_db)):
return items
def regenerate_all_trips(db):
trips = db.query(models.Trip).all()
for trip in trips:
generate_trip_items(
db,
trip=trip,
selected_tag_ids=[t.id for t in trip.selected_tags],
marked_tag_ids=[t.id for t in trip.marked_tags],
)
db.commit()
@router.post("/", response_model=ItemOut)
def create_item(payload: ItemCreate, db: Session = Depends(get_db)):
user = db.query(models.User).first()
@ -38,6 +51,8 @@ def create_item(payload: ItemCreate, db: Session = Depends(get_db)):
db.commit()
db.refresh(item)
regenerate_all_trips(db)
return item
@router.post("/{item_id}/tags", response_model=ItemOut)
@ -57,6 +72,9 @@ def add_tag_to_item(item_id: UUID, payload: TagIdPayload, db: Session = Depends(
item.tags.append(tag)
db.commit()
db.refresh(item)
regenerate_all_trips(db)
return item
@router.delete("/{item_id}/tags/{tag_id}", response_model=ItemOut)
@ -72,6 +90,9 @@ def remove_tag_from_item(item_id: UUID, tag_id: UUID, db: Session = Depends(get_
item.tags.remove(tag)
db.commit()
db.refresh(item)
regenerate_all_trips(db)
return item
@router.delete("/{item_id}", status_code=204)
@ -82,6 +103,8 @@ def delete_item(item_id: UUID, db: Session = Depends(get_db)):
db.delete(item)
db.commit()
regenerate_all_trips(db)
@router.put("/{item_id}", response_model=ItemOut)
def update_item_name(item_id: UUID, payload: dict, db: Session = Depends(get_db)):
item = db.get(models.Item, item_id)
@ -93,4 +116,7 @@ def update_item_name(item_id: UUID, payload: dict, db: Session = Depends(get_db)
item.name = name
db.commit()
db.refresh(item)
regenerate_all_trips(db)
return item