from typing import List, Optional from fastapi import APIRouter, Depends, HTTPException, Query from sqlmodel import Session, select from database import get_session from models import Review, User from schemas import ReviewCreate, ReviewRead from auth import get_current_user router = APIRouter(prefix="/reviews", tags=["reviews"]) @router.post("/", response_model=ReviewRead) def create_review( review: ReviewCreate, session: Session = Depends(get_session), current_user: User = Depends(get_current_user) ): db_review = Review.model_validate(review) db_review.user_id = current_user.id session.add(db_review) session.commit() session.refresh(db_review) return db_review @router.get("/", response_model=List[ReviewRead]) def read_reviews( show_id: Optional[int] = None, venue_id: Optional[int] = None, song_id: Optional[int] = None, performance_id: Optional[int] = None, tour_id: Optional[int] = None, year: Optional[int] = None, offset: int = 0, limit: int = Query(default=100, le=100), session: Session = Depends(get_session) ): query = select(Review) if show_id: query = query.where(Review.show_id == show_id) if venue_id: query = query.where(Review.venue_id == venue_id) if song_id: query = query.where(Review.song_id == song_id) if performance_id: query = query.where(Review.performance_id == performance_id) if tour_id: query = query.where(Review.tour_id == tour_id) if year: query = query.where(Review.year == year) reviews = session.exec(query.offset(offset).limit(limit)).all() return reviews