Source code for pydotorg.domains.banners.services

"""Banners domain services for business logic."""

from __future__ import annotations

from typing import TYPE_CHECKING

from advanced_alchemy.service import SQLAlchemyAsyncRepositoryService

from pydotorg.domains.banners.models import Banner
from pydotorg.domains.banners.repositories import BannerRepository

if TYPE_CHECKING:
    import datetime


[docs] class BannerService(SQLAlchemyAsyncRepositoryService[Banner]): """Service for Banner business logic.""" repository_type = BannerRepository
[docs] async def get_active_banners(self, current_date: datetime.date | None = None) -> list[Banner]: """Get active banners. Args: current_date: The date to check against. If None, only checks is_active flag. Returns: List of active banners. """ return await self.repository.get_active_banners(current_date=current_date)
[docs] async def get_sitewide_banners(self, current_date: datetime.date | None = None) -> list[Banner]: """Get active sitewide banners. Args: current_date: The date to check against. If None, only checks is_active flag. Returns: List of active sitewide banners. """ return await self.repository.get_sitewide_banners(current_date=current_date)
[docs] async def get_frontend_banners(self, current_date: datetime.date | None = None) -> list[Banner]: """Get active banners for frontend pages. Args: current_date: The date to check against. If None, only checks is_active flag. Returns: List of active frontend banners. """ return await self.repository.get_frontend_banners(current_date=current_date)
[docs] async def get_api_banners(self, current_date: datetime.date | None = None) -> list[Banner]: """Get active banners for API routes. Args: current_date: The date to check against. If None, only checks is_active flag. Returns: List of active API banners. """ return await self.repository.get_api_banners(current_date=current_date)
[docs] async def get_by_name(self, name: str) -> Banner | None: """Get a banner by name. Args: name: The banner name to search for. Returns: The banner if found, None otherwise. """ return await self.repository.get_by_name(name)