from flask import request, jsonify from marshmallow import ValidationError from app.utils.logger import logger from app.api.schemas.disbursement import DisbursementSchema, DisburseLoanResponseSchema import datetime class DisbursementService: @staticmethod def process_request(data): """ Process the Disbursement request. Args: data (dict): The request data. Returns: tuple: JSON response and HTTP status code. """ try: logger.info("Processing Disbursement request") # Validate input data using DisbursementSchema schema = DisbursementSchema() validated_data = schema.load(data) # Raises ValidationError if invalid # For demo purposes, we simulate a response using the validated data response_data = { "transactionId": validated_data.get("transactionId"), "fbnTransactionId": validated_data.get("fbnTransactionId"), # Example or generated value "debtId": validated_data.get("debtId"), "customerId": validated_data.get("customerId"), "accountId": validated_data.get("accountId"), "productId": validated_data.get("productId"), "provideAmount": validated_data.get("provideAmount"), "collectAmountInterest": validated_data.get("collectAmountInterest"), "collectAmountMgtFee": validated_data.get("collectAmountMgtFee"), "collectAmountInsurance": validated_data.get("collectAmountInsurance"), "collectAmountVAT": validated_data.get("collectAmountVAT"), "countryId": validated_data.get("countryId"), "responseCode": "00", # success code example "responseMessage": "Loan Request Completed Successfully!", "disburseVerify": datetime.datetime.now().isoformat(), "verifyResult": "00", "verifyDescription": "Collect Status retrieved successfully.", "disburseDate": datetime.datetime.now().isoformat(), "disburseResult": "00", "disburseDescription": "Loan Request Completed Successfully!", } # Serialize response response_schema = DisburseLoanResponseSchema() result = response_schema.dump(response_data) return jsonify(result), 200 except ValidationError as err: logger.error(f"Validation Error: {err.messages}") return jsonify({ "message": "Validation exception", "errors": err.messages }), 422 except Exception as e: logger.error(f"An error occurred: {str(e)}", exc_info=True) return jsonify({ "message": "Internal Server Error" }), 500