51 lines
2.1 KiB
Python
51 lines
2.1 KiB
Python
"""
|
|
@repository StorefrontRepository (Backend/app/repositories/StorefrontRepository.py)
|
|
@purpose Data access layer for StorefrontContent, ProductReviews, and Settings.
|
|
"""
|
|
from sqlalchemy.orm import Session
|
|
from sqlalchemy import select, and_
|
|
from typing import List, Optional
|
|
import ulid
|
|
|
|
from app.models.StorefrontContentModel import StorefrontContent, ContentStatusEnum
|
|
from app.models.ProductReviewModel import ProductReview, ProductReviewImage
|
|
from app.models.SettingModel import Setting
|
|
|
|
class StorefrontRepository:
|
|
def __init__(self, db: Session):
|
|
self.db = db
|
|
|
|
def get_active_content(self, page: str, region: Optional[str] = None) -> List[StorefrontContent]:
|
|
query = select(StorefrontContent).where(StorefrontContent.page == page)
|
|
if region:
|
|
query = query.where(StorefrontContent.region == region)
|
|
query = query.order_by(StorefrontContent.display_order.asc())
|
|
return self.db.execute(query).scalars().all()
|
|
|
|
def get_content_by_id(self, content_id: str) -> Optional[StorefrontContent]:
|
|
return self.db.execute(select(StorefrontContent).where(StorefrontContent.content_id == content_id)).scalar_one_or_none()
|
|
|
|
def create_or_update_content(self, content: StorefrontContent) -> StorefrontContent:
|
|
self.db.add(content)
|
|
self.db.commit()
|
|
self.db.refresh(content)
|
|
return content
|
|
|
|
def get_approved_reviews(self, product_id: str) -> List[ProductReview]:
|
|
return self.db.execute(
|
|
select(ProductReview)
|
|
.where(and_(ProductReview.product_id == product_id, ProductReview.is_approved == True))
|
|
.order_by(ProductReview.created_at.desc())
|
|
).scalars().all()
|
|
|
|
def create_review(self, review: ProductReview) -> ProductReview:
|
|
self.db.add(review)
|
|
self.db.commit()
|
|
self.db.refresh(review)
|
|
return review
|
|
|
|
def get_public_settings(self, group: Optional[str] = None) -> List[Setting]:
|
|
query = select(Setting).where(Setting.is_public == True)
|
|
if group:
|
|
query = query.where(Setting.group == group)
|
|
return self.db.execute(query).scalars().all()
|