60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
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)
|