From c1655bdd0aec88cbad7e64d2ea31320dd020a79d Mon Sep 17 00:00:00 2001
From: ValueOn AG
Date: Mon, 8 Jun 2026 21:01:32 +0200
Subject: [PATCH] refactor: move billingWebhookHandler to serviceBilling layer
Business logic for Stripe webhooks belongs in serviceCenter/services/serviceBilling/, not in routes/. Updates 3 lazy imports in routeBilling.py accordingly.
Co-authored-by: Cursor
---
modules/routes/routeBilling.py | 6 +++---
.../services/serviceBilling}/billingWebhookHandler.py | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
rename modules/{routes => serviceCenter/services/serviceBilling}/billingWebhookHandler.py (99%)
diff --git a/modules/routes/routeBilling.py b/modules/routes/routeBilling.py
index 058038c0..d193f9bb 100644
--- a/modules/routes/routeBilling.py
+++ b/modules/routes/routeBilling.py
@@ -332,7 +332,7 @@ def _getStripeClient():
def _creditStripeSessionIfNeeded(billingInterface, session: Dict[str, Any], eventId: Optional[str] = None) -> CheckoutConfirmResponse:
"""Credit balance from Stripe Checkout session if not already credited."""
- from .billingWebhookHandler import creditStripeSessionIfNeeded
+ from modules.serviceCenter.services.serviceBilling.billingWebhookHandler import creditStripeSessionIfNeeded
return creditStripeSessionIfNeeded(billingInterface, session, eventId, CheckoutConfirmResponse)
@@ -1079,13 +1079,13 @@ async def stripeWebhook(
def handleSubscriptionCheckoutCompleted(session, eventId: str) -> None:
"""Handle checkout.session.completed for mode=subscription."""
- from .billingWebhookHandler import handleSubscriptionCheckoutCompleted as _handler
+ from modules.serviceCenter.services.serviceBilling.billingWebhookHandler import handleSubscriptionCheckoutCompleted as _handler
_handler(session, eventId, getRootInterface)
def _handleSubscriptionWebhook(event) -> None:
"""Process Stripe subscription webhook events."""
- from .billingWebhookHandler import handleSubscriptionWebhook as _handler
+ from modules.serviceCenter.services.serviceBilling.billingWebhookHandler import handleSubscriptionWebhook as _handler
_handler(event, getRootInterface)
diff --git a/modules/routes/billingWebhookHandler.py b/modules/serviceCenter/services/serviceBilling/billingWebhookHandler.py
similarity index 99%
rename from modules/routes/billingWebhookHandler.py
rename to modules/serviceCenter/services/serviceBilling/billingWebhookHandler.py
index ecfe37b4..8e765cc7 100644
--- a/modules/routes/billingWebhookHandler.py
+++ b/modules/serviceCenter/services/serviceBilling/billingWebhookHandler.py
@@ -2,7 +2,7 @@
# All rights reserved.
"""
Stripe webhook and subscription business logic for billing.
-Extracted from routeBilling.py for maintainability.
+Handles checkout credit, subscription lifecycle transitions, and invoice events.
"""
import logging