from typing import List from fastapi import APIRouter, Depends, HTTPException, Query from sqlmodel import Session, select from database import get_session from models import Tour, User from schemas import TourCreate, TourRead, TourUpdate from auth import get_current_user router = APIRouter(prefix="/tours", tags=["tours"]) @router.post("/", response_model=TourRead) def create_tour( tour: TourCreate, session: Session = Depends(get_session), current_user: User = Depends(get_current_user) ): db_tour = Tour.model_validate(tour) session.add(db_tour) session.commit() session.refresh(db_tour) return db_tour @router.get("/", response_model=List[TourRead]) def read_tours( offset: int = 0, limit: int = Query(default=100, le=100), session: Session = Depends(get_session) ): tours = session.exec(select(Tour).offset(offset).limit(limit)).all() return tours @router.get("/{slug}", response_model=TourRead) def read_tour(slug: str, session: Session = Depends(get_session)): tour = session.exec(select(Tour).where(Tour.slug == slug)).first() if not tour: raise HTTPException(status_code=404, detail="Tour not found") return tour