from __future__ import annotations import logging from typing import Annotated from fastapi import APIRouter, Depends, Response from core.auth.models import CurrentUser from v1.payments.dependencies import get_payment_service from v1.payments.schemas import ( AppleServerNotificationRequest, VerifyTransactionRequest, VerifyTransactionResponse, ) from v1.payments.service import PaymentService from v1.users.dependencies import get_current_user logger = logging.getLogger(__name__) router = APIRouter(prefix="/payments", tags=["payments"]) @router.post( "/apple/transactions/verify", response_model=VerifyTransactionResponse, ) async def verify_apple_transaction( request: VerifyTransactionRequest, service: Annotated[PaymentService, Depends(get_payment_service)], current_user: Annotated[CurrentUser, Depends(get_current_user)], ) -> VerifyTransactionResponse: return await service.verify_and_grant( user_id=current_user.id, user_email=current_user.email or "", request=request, ) @router.post("/apple/notifications", status_code=200) async def handle_apple_server_notification( request: AppleServerNotificationRequest, service: Annotated[PaymentService, Depends(get_payment_service)], ) -> Response: await service.handle_server_notification(signed_payload=request.signed_payload) return Response(status_code=200)