from __future__ import annotations
from typing import List, Optional
from fastapi import APIRouter, Depends, status
from app.auth import get_current_user_optional
from app.models import (
DailyDigestConfig,
DailyDigestEmail,
GenerateDigestRequest,
RemindersSummary,
UpdateDigestConfigRequest,
User,
)
from app.store import DatabaseStore, get_store
from app.telemetry import record_digest_generated, record_reminders_summary_requested
router = APIRouter()
@router.get("/summary", response_model=RemindersSummary, status_code=status.HTTP_200_OK)
async def get_summary(
current_user: User = Depends(get_current_user_optional),
store: DatabaseStore = Depends(get_store),
) -> RemindersSummary:
summary = store.get_reminders_summary(user=current_user)
record_reminders_summary_requested()
return summary
@router.get("/digest/config", response_model=DailyDigestConfig, status_code=status.HTTP_200_OK)
async def get_digest_config(
store: DatabaseStore = Depends(get_store),
) -> DailyDigestConfig:
return store.get_digest_config()
@router.patch("/digest/config", response_model=DailyDigestConfig, status_code=status.HTTP_200_OK)
async def update_digest_config(
payload: UpdateDigestConfigRequest,
store: DatabaseStore = Depends(get_store),
) -> DailyDigestConfig:
return store.update_digest_config(data=payload)
@router.post("/digest/generate", response_model=DailyDigestEmail, status_code=status.HTTP_200_OK)
async def generate_digest(
payload: Optional[GenerateDigestRequest] = None,
current_user: User = Depends(get_current_user_optional),
store: DatabaseStore = Depends(get_store),
) -> DailyDigestEmail:
recipient_email = payload.recipientEmail if payload else None
try:
digest = store.generate_digest(user=current_user, recipient_email=recipient_email)
record_digest_generated(success=True)
return digest
except Exception:
record_digest_generated(success=False)
raise
@router.get("/digest/history", response_model=List[DailyDigestEmail], status_code=status.HTTP_200_OK)
async def get_digest_history(
store: DatabaseStore = Depends(get_store),
) -> List[DailyDigestEmail]:
return store.get_digest_history()