[add]: Offer analysis

This commit is contained in:
VivianDee
2025-05-05 17:03:39 +01:00
parent fdd7c58fab
commit 4c4ef909c2
4 changed files with 60 additions and 17 deletions
+1
View File
@@ -6,3 +6,4 @@ from app.api.services.repayment import RepaymentService
from app.api.services.customer_consent import CustomerConsentService from app.api.services.customer_consent import CustomerConsentService
from app.api.services.notification_callback import NotificationCallbackService from app.api.services.notification_callback import NotificationCallbackService
from app.api.services.authorization import AuthorizationService from app.api.services.authorization import AuthorizationService
from app.api.services.offer_analysis import OfferAnalysis
+24
View File
@@ -0,0 +1,24 @@
from app.models import Offer, TransactionOffer
class OfferAnalysis:
@staticmethod
def get_offer(transaction_id, rac_response, validated_data):
customer_id = validated_data.get("customerId")
product_id = validated_data.get("productId")
offer_id = validated_data.get("offerId")
transaction_offer_id = int(offer_id[5:]) # The last part is int
transaction_offer = TransactionOffer.is_valid_transaction_offer(transaction_offer_id, customer_id, product_id)
if not transaction_offer:
raise ValueError("Invalid Transaction Offer.")
eligible_amount = transaction_offer.eligible_amount
offer = Offer.is_valid_offer( transaction_offer.offer_id)
if not offer:
raise ValueError("Invalid Offer.")
return transaction_offer, offer, eligible_amount
+28 -15
View File
@@ -14,6 +14,7 @@ from app.extensions import db
from datetime import datetime, timezone from datetime import datetime, timezone
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from app.models import LoanRepaymentSchedule from app.models import LoanRepaymentSchedule
from app.api.services import OfferAnalysis
class ProvideLoanService(BaseService): class ProvideLoanService(BaseService):
@@ -45,25 +46,37 @@ class ProvideLoanService(BaseService):
customer = Customer.is_valid_customer(customer_id) customer = Customer.is_valid_customer(customer_id)
if (ProvideLoanService.validate_account_ownership(account_id = account_id, customer_id = customer_id)): if (ProvideLoanService.validate_account_ownership(account_id = account_id, customer_id = customer_id)):
try:
transaction_offer_id = int(offer_id[5:]) # The last part is int transaction_offer, offer, eligible_amount = OfferAnalysis.get_offer(
transaction_id=transaction_id,
transaction_offer = TransactionOffer.is_valid_transaction_offer(transaction_offer_id) rac_response=None,
if not transaction_offer: validated_data=validated_data
logger.error(f"Invalid Transaction Offer") )
except ValueError as ve:
logger.error(str(ve))
return jsonify({ return jsonify({
"message": "Invalid Transaction Offer." "message": str(ve)
}), 400 }), 400
# transaction_offer_id = int(offer_id[5:]) # The last part is int
eligible_amount = transaction_offer.eligible_amount # transaction_offer = TransactionOffer.is_valid_transaction_offer(transaction_offer_id)
offer = Offer.is_valid_offer( transaction_offer.offer_id)
# if not transaction_offer:
# logger.error(f"Invalid Transaction Offer")
# return jsonify({
# "message": "Invalid Transaction Offer."
# }), 400
if not offer: # eligible_amount = transaction_offer.eligible_amount
logger.error(f"Invalid Offer") # offer = Offer.is_valid_offer( transaction_offer.offer_id)
return jsonify({
"message": "Invalid Offer." # if not offer:
}), 400 # logger.error(f"Invalid Offer")
# return jsonify({
# "message": "Invalid Offer."
# }), 400
# Log Transaction # Log Transaction
transaction = ProvideLoanService.log_transaction(validated_data=validated_data) transaction = ProvideLoanService.log_transaction(validated_data=validated_data)
+7 -2
View File
@@ -26,8 +26,13 @@ class TransactionOffer(db.Model):
) )
@classmethod @classmethod
def is_valid_transaction_offer(cls, offer_id): def is_valid_transaction_offer(cls, offer_id, customer_id, product_id):
transaction_offer = cls.query.filter_by(id=str(offer_id)).first() transaction_offer = cls.query.filter_by(
id = str(offer_id),
customer_id = customer_id,
product_id = product_id
# transaction_id = transaction_id,
).first()
if not transaction_offer: if not transaction_offer:
return False return False