Refactor payment service, fix DB session, and consolidate endpoints
- Fix critical NameError in database.py by restoring Session factory - Refactor payment_service.py and crud.py to use shared constants.py and utils.py - Deduplicate state mapping and input sanitization logic - Move transaction amount calculation logic from CRUD to Router layer - Enforce type safety in schemas using IntEnum for TransactionType/Status - Move capture endpoint from transaction.py to payment.py (now /payments/capture) - Update create_customer_profile signature for clarity
This commit is contained in:
@@ -11,55 +11,18 @@ from authorizenet.constants import constants
|
||||
from config import load_config
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
# Load Authorize.net credentials
|
||||
from config import load_config, API_LOGIN_ID, TRANSACTION_KEY, VALIDATION_MODE, ENVIRONMENT
|
||||
|
||||
# Load Authorize.net credentials
|
||||
ApplicationConfig = load_config()
|
||||
|
||||
|
||||
|
||||
if ApplicationConfig.CURRENT_SETTINGS == 'PRODUCTION':
|
||||
constants.environment = constants.PRODUCTION
|
||||
VALIDATION_MODE = "liveMode"
|
||||
API_LOGIN_ID = ApplicationConfig.API_LOGIN_ID
|
||||
TRANSACTION_KEY = ApplicationConfig.TRANSACTION_KEY
|
||||
|
||||
elif ApplicationConfig.CURRENT_SETTINGS == 'LOCAL':
|
||||
constants.environment = constants.PRODUCTION
|
||||
VALIDATION_MODE = "liveMode"
|
||||
API_LOGIN_ID = ApplicationConfig.API_LOGIN_ID
|
||||
TRANSACTION_KEY = ApplicationConfig.TRANSACTION_KEY
|
||||
|
||||
else:
|
||||
constants.environment = constants.SANDBOX
|
||||
constants.show_url_on_request = True
|
||||
VALIDATION_MODE = "testMode"
|
||||
API_LOGIN_ID = ApplicationConfig.API_LOGIN_ID
|
||||
TRANSACTION_KEY = ApplicationConfig.TRANSACTION_KEY
|
||||
# Set environment
|
||||
constants.environment = ENVIRONMENT
|
||||
|
||||
|
||||
|
||||
def _get_authnet_error_message(response):
|
||||
"""
|
||||
Robust error parsing function that correctly handles the API's response format.
|
||||
"""
|
||||
if response is None:
|
||||
return "No response from payment gateway."
|
||||
|
||||
try:
|
||||
if hasattr(response, 'messages') and response.messages is not None:
|
||||
if hasattr(response.messages, 'message'):
|
||||
message_list = response.messages.message
|
||||
if not isinstance(message_list, list):
|
||||
message_list = [message_list]
|
||||
if message_list:
|
||||
msg = message_list[0]
|
||||
code = msg.code if hasattr(msg, 'code') else 'Unknown'
|
||||
text = msg.text if hasattr(msg, 'text') else 'No details provided.'
|
||||
return f"Error {code}: {text}"
|
||||
except Exception as e:
|
||||
logger.debug(f"Error while parsing Auth.Net error message: {e}")
|
||||
return "An unparsable error occurred with the payment gateway."
|
||||
|
||||
return "An unknown error occurred with the payment gateway."
|
||||
from .payment_service import _get_authnet_error_message
|
||||
|
||||
|
||||
def delete_user_account(db: Session, customer_id: int) -> dict:
|
||||
@@ -161,7 +124,7 @@ def delete_user_account(db: Session, customer_id: int) -> dict:
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
logger.debug(f"Critical exception during account deletion for customer {customer_id}: {traceback.format_exc()}")
|
||||
logger.error(f"Critical exception during account deletion for customer {customer_id}: {traceback.format_exc()}")
|
||||
db.rollback()
|
||||
return {
|
||||
"success": False,
|
||||
@@ -192,14 +155,7 @@ def _delete_customer_profile(profile_id: str) -> bool:
|
||||
)
|
||||
|
||||
controller = deleteCustomerProfileController(request)
|
||||
if ApplicationConfig.CURRENT_SETTINGS == 'PRODUCTION':
|
||||
controller.setenvironment(constants.PRODUCTION)
|
||||
controller.execute()
|
||||
elif ApplicationConfig.CURRENT_SETTINGS == 'LOCAL':
|
||||
controller.setenvironment(constants.PRODUCTION)
|
||||
controller.execute()
|
||||
else:
|
||||
controller.execute()
|
||||
controller.execute()
|
||||
response = controller.getresponse()
|
||||
|
||||
if response is None:
|
||||
@@ -247,14 +203,7 @@ def _delete_payment_profile(customer_profile_id: str, payment_profile_id: str) -
|
||||
)
|
||||
|
||||
controller = deleteCustomerPaymentProfileController(request)
|
||||
if ApplicationConfig.CURRENT_SETTINGS == 'PRODUCTION':
|
||||
controller.setenvironment(constants.PRODUCTION)
|
||||
controller.execute()
|
||||
elif ApplicationConfig.CURRENT_SETTINGS == 'LOCAL':
|
||||
controller.setenvironment(constants.PRODUCTION)
|
||||
controller.execute()
|
||||
else:
|
||||
controller.execute()
|
||||
controller.execute()
|
||||
response = controller.getresponse()
|
||||
|
||||
if response is None:
|
||||
|
||||
Reference in New Issue
Block a user