Initial commit
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
"""
|
||||
Controller for loan collection endpoints.
|
||||
"""
|
||||
from flask import Blueprint, request, jsonify
|
||||
from api.middleware import api_key_required
|
||||
from api.models import CollectLoanRequest, CollectLoanResponse
|
||||
import logging
|
||||
|
||||
# Configure logger
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Create blueprint
|
||||
collection_bp = Blueprint('collection', __name__)
|
||||
|
||||
@collection_bp.route('/CollectLoan', methods=['POST'])
|
||||
@api_key_required
|
||||
def collect_loan():
|
||||
"""
|
||||
Endpoint to process loan collection requests from Simbrella.
|
||||
|
||||
This method handles requests to collect money from user accounts.
|
||||
When a request is received, FirstBank should check all user accounts
|
||||
and collect as much money as possible to cover the existing loan
|
||||
either partially or fully.
|
||||
|
||||
Returns:
|
||||
JSON response with collection status
|
||||
"""
|
||||
try:
|
||||
# Parse and validate request
|
||||
data = request.get_json()
|
||||
if not data:
|
||||
return jsonify({
|
||||
'resultCode': '400',
|
||||
'resultDescription': 'Invalid JSON payload'
|
||||
}), 400
|
||||
|
||||
# Validate required fields
|
||||
required_fields = ['transactionId', 'fbnTransactionId', 'debtId', 'customerId',
|
||||
'accountId', 'productId', 'collectAmount', 'collectionMethod',
|
||||
'lienAmount', 'countryId']
|
||||
for field in required_fields:
|
||||
if field not in data:
|
||||
return jsonify({
|
||||
'resultCode': '422',
|
||||
'resultDescription': f'Missing required field: {field}'
|
||||
}), 422
|
||||
|
||||
# Create request model
|
||||
req = CollectLoanRequest.from_dict(data)
|
||||
|
||||
# Process collection request (this would connect to the business logic)
|
||||
# For demonstration, we'll return a mock response with partial collection
|
||||
|
||||
# Assume we collected 75% of the requested amount
|
||||
collected_amount = req.collectAmount * 0.75
|
||||
remaining_lien = req.lienAmount - collected_amount
|
||||
|
||||
# Create response
|
||||
response = CollectLoanResponse(
|
||||
transactionId=req.transactionId,
|
||||
debtId=req.debtId,
|
||||
customerId=req.customerId,
|
||||
accountId=req.accountId,
|
||||
productId=req.productId,
|
||||
collectAmount=collected_amount,
|
||||
lienAmount=remaining_lien,
|
||||
resultCode="00",
|
||||
resultDescription="Loan Collection Successful",
|
||||
penalCharge=req.penalCharge if hasattr(req, 'penalCharge') else 0.0
|
||||
)
|
||||
|
||||
logger.info(f"Processed collection for customer {req.customerId}, collected {collected_amount}")
|
||||
return jsonify(response.to_dict())
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error processing collection: {str(e)}")
|
||||
return jsonify({
|
||||
'resultCode': '500',
|
||||
'resultDescription': 'Internal server error'
|
||||
}), 500
|
||||
Reference in New Issue
Block a user