from collections.abc import Sequence import sqlalchemy as sa from anydi import singleton from fansifter_common.adapters.db import Database from sqlalchemy.orm import contains_eager from preference_center.profile.models import MailingList, Subscription @singleton class SubscriptionRepository: def __init__(self, db: Database) -> None: self.db = db def find_by_profile_id(self, profile_id: str, /) -> Sequence[Subscription]: query = ( sa.select(Subscription) .join(MailingList) .where(Subscription.profile_id == profile_id) .order_by(MailingList.name) .options(contains_eager(Subscription.mailing_list)) ) result = self.db.session.execute(query) return result.scalars().all()