From f252e33be2daeb9e31155eeef32602b93c598e3b Mon Sep 17 00:00:00 2001 From: VivianDee <115420678+VivianDee@users.noreply.github.com> Date: Thu, 10 Apr 2025 17:15:19 +0100 Subject: [PATCH] [add]: Loan repayment event --- app/api/services/provide_loan.py | 4 +--- app/models/account.py | 10 ++++++++-- app/models/customer.py | 25 +++++++++++++++---------- app/models/loan.py | 9 +++++++-- app/models/repayment.py | 10 ++++++++-- 5 files changed, 39 insertions(+), 19 deletions(-) diff --git a/app/api/services/provide_loan.py b/app/api/services/provide_loan.py index e8562b7..bfb4f05 100644 --- a/app/api/services/provide_loan.py +++ b/app/api/services/provide_loan.py @@ -41,9 +41,7 @@ class ProvideLoanService(BaseService): "message": "Failed to log transaction." }), 400 - # Save the loan details - loan_id = f"loan_{transaction_id}" - + # Save the loan details loan = Loan.create_loan( customer_id=customer_id, account_id=account_id, diff --git a/app/models/account.py b/app/models/account.py index 8c94098..af4501e 100644 --- a/app/models/account.py +++ b/app/models/account.py @@ -1,6 +1,7 @@ from datetime import datetime, timezone from sqlalchemy.orm import relationship from app.extensions import db +from sqlalchemy.exc import IntegrityError class Account(db.Model): __tablename__ = 'accounts' @@ -27,8 +28,13 @@ class Account(db.Model): customer_id=customer_id, account_type=account_type ) - db.session.add(account) - db.session.commit() + + try: + db.session.add(account) + db.session.commit() + except IntegrityError as err: + db.session.rollback() + raise ValueError(f"Database integrity error: {err}") return account @classmethod diff --git a/app/models/customer.py b/app/models/customer.py index e6418c1..e0fb316 100644 --- a/app/models/customer.py +++ b/app/models/customer.py @@ -2,6 +2,7 @@ from datetime import datetime, timezone from sqlalchemy.orm import relationship from app.extensions import db from app.models.account import Account +from sqlalchemy.exc import IntegrityError class Customer(db.Model): __tablename__ = 'customers' @@ -33,16 +34,20 @@ class Customer(db.Model): # Create the customer customer = cls(id=id, msisdn=msisdn, country_code=country_code) - db.session.add(customer) - - # Create an associated account - account = Account.create_account( - id=account_id, - customer_id=id, - account_type=account_type - ) - - db.session.commit() + try: + db.session.add(customer) + + # Create an associated account + account = Account.create_account( + id=account_id, + customer_id=id, + account_type=account_type + ) + + db.session.commit() + except IntegrityError as err: + db.session.rollback() + raise ValueError(f"Database integrity error: {err}") return customer def __repr__(self): diff --git a/app/models/loan.py b/app/models/loan.py index a3d99e2..2d68a64 100644 --- a/app/models/loan.py +++ b/app/models/loan.py @@ -2,6 +2,7 @@ from datetime import datetime, timezone from app.extensions import db from app.models.customer import Customer from app.models.account import Account +from sqlalchemy.exc import IntegrityError class Loan(db.Model): @@ -44,8 +45,12 @@ class Loan(db.Model): status=status ) - db.session.add(loan) - db.session.commit() + try: + db.session.add(loan) + db.session.commit() + except IntegrityError as err: + db.session.rollback() + raise ValueError(f"Database integrity error: {err}") return loan diff --git a/app/models/repayment.py b/app/models/repayment.py index af62554..538eda3 100644 --- a/app/models/repayment.py +++ b/app/models/repayment.py @@ -2,6 +2,7 @@ from datetime import datetime, timezone from app.extensions import db from app.models.customer import Customer from app.models.loan import Loan +from sqlalchemy.exc import IntegrityError class Repayment(db.Model): @@ -37,8 +38,13 @@ class Repayment(db.Model): product_id=product_id, ) - db.session.add(repayment) - db.session.commit() + try: + db.session.add(repayment) + db.session.commit() + except IntegrityError as err: + db.session.rollback() + raise ValueError(f"Database integrity error: {err}") + return repayment def __repr__(self):