from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session, joinedload from uuid import UUID from backend.database import get_db from backend import models from backend.schemas import TripItemOut router = APIRouter(prefix="/trip-items", tags=["trip-items"]) @router.get("/by-trip/{trip_id}", response_model=list[TripItemOut]) def list_trip_items(trip_id: UUID, db: Session = Depends(get_db)): trip = db.get(models.Trip, trip_id) if not trip: raise HTTPException(status_code=404, detail="Trip not found") items = ( db.query(models.TripItem) .options(joinedload(models.TripItem.tag)) .filter(models.TripItem.trip_id == trip_id) .all() ) return [ TripItemOut( id=ti.id, trip_id=ti.trip_id, item_id=ti.item_id, name_calculated=ti.name_calculated, checked=ti.checked, tag=ti.tag, ) for ti in items ] @router.post("/{trip_item_id}/toggle", response_model=TripItemOut) def toggle_trip_item(trip_item_id: UUID, db: Session = Depends(get_db)): ti = ( db.query(models.TripItem) .options(joinedload(models.TripItem.tag)) .get(trip_item_id) ) if not ti: raise HTTPException(status_code=404, detail="TripItem not found") ti.checked = not ti.checked db.commit() db.refresh(ti) return TripItemOut( id=ti.id, trip_id=ti.trip_id, item_id=ti.item_id, name_calculated=ti.name_calculated, checked=ti.checked, tag=ti.tag, )