from typing import List, Optional from sqlalchemy.orm import Session from app.crud.base import CRUDBase from app.models.review import Review from app.schemas.review import ReviewCreate, ReviewUpdate class CRUDReview(CRUDBase[Review, ReviewCreate, ReviewUpdate]): def get_reviews_by_product( self, db: Session, *, product_id: int, skip: int = 0, limit: int = 100 ) -> List[Review]: return ( db.query(Review) .filter(Review.product_id == product_id) .order_by(Review.created_at.desc()) .offset(skip) .limit(limit) .all() ) def get_reviews_by_user( self, db: Session, *, user_id: int, skip: int = 0, limit: int = 100 ) -> List[Review]: return ( db.query(Review) .filter(Review.user_id == user_id) .order_by(Review.created_at.desc()) .offset(skip) .limit(limit) .all() ) def get_user_review_for_product( self, db: Session, *, user_id: int, product_id: int ) -> Optional[Review]: return ( db.query(Review) .filter(Review.user_id == user_id, Review.product_id == product_id) .first() ) def create_user_review( self, db: Session, *, obj_in: ReviewCreate, user_id: int ) -> Review: db_obj = Review( user_id=user_id, product_id=obj_in.product_id, rating=obj_in.rating, comment=obj_in.comment, ) db.add(db_obj) db.commit() db.refresh(db_obj) return db_obj review = CRUDReview(Review)