""" @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()