""" Copyright 2025 Google. This software is provided as-is, without warranty or representation for any use or purpose. Your use of it is subject to your agreement with Google. Notification API endpoints. """ import logging from fastapi import APIRouter, Depends, HTTPException from ..models.notification import ExternalNotRequestDTO from ..services.notification_manager import NotificationManagerService from ..dependencies import get_notification_manager logger = logging.getLogger(__name__) router = APIRouter(prefix="/api/v1/dialogflow", tags=["notifications"]) @router.post("/notification", status_code=200) async def process_notification( request: ExternalNotRequestDTO, notification_manager: NotificationManagerService = Depends( get_notification_manager ), ) -> None: """ Process push notification from external system. This endpoint receives notifications (e.g., "Your card was blocked") and: 1. Stores them in Redis/Firestore 2. Associates them with the user's conversation session 3. Triggers a Dialogflow event When the user later sends a message asking about the notification ("Why was it blocked?"), the message filter will classify it as NOTIFICATION and route to the appropriate handler. Args: request: External notification request with text, phone, and parameters Returns: None (204 No Content) Raises: HTTPException: 400 if validation fails, 500 for internal errors """ try: logger.info("Received notification request") await notification_manager.process_notification(request) logger.info("Successfully processed notification request") # Match Java behavior: process but don't return response body except ValueError as e: logger.error(f"Validation error: {str(e)}", exc_info=True) raise HTTPException(status_code=400, detail=str(e)) except Exception as e: logger.error(f"Error processing notification: {str(e)}", exc_info=True) raise HTTPException(status_code=500, detail="Internal server error")