diff --git a/backend/crud.py b/backend/crud.py index 296e482..dbf7489 100644 --- a/backend/crud.py +++ b/backend/crud.py @@ -85,20 +85,14 @@ def generate_trip_items( selected_tag_ids: List[UUID_t], marked_tag_ids: List[UUID_t], ) -> Tuple[List[UUID_t], List[UUID_t]]: - """Regeneriert TripItems für einen Trip. Löscht alte, legt neue an. - Gibt (created_ids, deleted_checked_ids) zurück.""" - # Sammle bestehende checked Items, falls sie verschwinden - deleted_checked: List[UUID_t] = [] - - # Lösche alle existierenden TripItems und merke checked, die wegfallen + # Map (item_id, tag_id) -> checked + previous_checked = {} for ti in list(trip.trip_items): - if ti.checked: - deleted_checked.append(ti.id) + previous_checked[(ti.item_id, ti.tag_id)] = ti.checked db.delete(ti) db.flush() items = items_for_trip(db, trip.user_id, trip, selected_tag_ids) - created_ids: List[UUID_t] = [] marked_set = set(marked_tag_ids) @@ -109,11 +103,12 @@ def generate_trip_items( for tag_id in per_tags: calc = render_name(it.name, trip.start_date, trip.end_date) + checked = previous_checked.get((it.id, tag_id), False) ti = models.TripItem( trip_id=trip.id, item_id=it.id, name_calculated=calc, - checked=False, + checked=checked, tag_id=tag_id, ) db.add(ti) @@ -121,4 +116,4 @@ def generate_trip_items( created_ids.append(ti.id) db.flush() - return created_ids, deleted_checked + return created_ids, []