feat: implement Redis caching for analytics endpoints with fallback to database
Test / test (push) Successful in 15s
Test / test (push) Successful in 15s
This commit is contained in:
+22
-3
@@ -6,6 +6,7 @@ from fastapi import Depends, Header, HTTPException, status
|
||||
from fastapi.security import OAuth2PasswordBearer
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.core.cache import get_cache_client
|
||||
from app.core.config import settings
|
||||
from app.core.database import get_session
|
||||
from app.core.security import jwt_service, password_hasher
|
||||
@@ -29,6 +30,7 @@ from app.services.organization_service import (
|
||||
OrganizationService,
|
||||
)
|
||||
from app.services.task_service import TaskService
|
||||
from redis.asyncio.client import Redis
|
||||
|
||||
oauth2_scheme = OAuth2PasswordBearer(tokenUrl=f"{settings.api_v1_prefix}/auth/token")
|
||||
|
||||
@@ -67,8 +69,19 @@ def get_analytics_repository(session: AsyncSession = Depends(get_db_session)) ->
|
||||
return AnalyticsRepository(session=session)
|
||||
|
||||
|
||||
def get_deal_service(repo: DealRepository = Depends(get_deal_repository)) -> DealService:
|
||||
return DealService(repository=repo)
|
||||
def get_cache_backend() -> Redis | None:
|
||||
return get_cache_client()
|
||||
|
||||
|
||||
def get_deal_service(
|
||||
repo: DealRepository = Depends(get_deal_repository),
|
||||
cache: Redis | None = Depends(get_cache_backend),
|
||||
) -> DealService:
|
||||
return DealService(
|
||||
repository=repo,
|
||||
cache=cache,
|
||||
cache_backoff_ms=settings.analytics_cache_backoff_ms,
|
||||
)
|
||||
|
||||
|
||||
def get_auth_service(
|
||||
@@ -95,8 +108,14 @@ def get_activity_service(
|
||||
|
||||
def get_analytics_service(
|
||||
repo: AnalyticsRepository = Depends(get_analytics_repository),
|
||||
cache: Redis | None = Depends(get_cache_backend),
|
||||
) -> AnalyticsService:
|
||||
return AnalyticsService(repository=repo)
|
||||
return AnalyticsService(
|
||||
repository=repo,
|
||||
cache=cache,
|
||||
ttl_seconds=settings.analytics_cache_ttl_seconds,
|
||||
backoff_ms=settings.analytics_cache_backoff_ms,
|
||||
)
|
||||
|
||||
|
||||
def get_contact_service(
|
||||
|
||||
Reference in New Issue
Block a user