This commit is contained in:
Azeez Muibi
2025-04-11 16:43:32 +01:00
parent 79f0ac63f6
commit e7243434a4
32 changed files with 766 additions and 311 deletions
+23 -4
View File
@@ -3,6 +3,8 @@ from app.extensions import db
from app.models.customer import Customer
from app.models.account import Account
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import relationship
from app.models import Customer
class Loan(db.Model):
@@ -21,6 +23,12 @@ class Loan(db.Model):
created_at = db.Column(db.DateTime, default=datetime.now(timezone.utc))
updated_at = db.Column(db.DateTime, default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc))
customer = relationship(
"Customer",
primaryjoin="Customer.id == Loan.customer_id",
foreign_keys=[customer_id],
back_populates="loans",
)
@classmethod
def create_loan(cls, customer_id, account_id, offer_id, principal_amount, status='pending'):
@@ -47,9 +55,7 @@ class Loan(db.Model):
try:
db.session.add(loan)
db.session.commit()
except IntegrityError as err:
db.session.rollback()
raise ValueError(f"Database integrity error: {err}")
return loan
@@ -92,8 +98,21 @@ class Loan(db.Model):
# Update loan status and the updated_at timestamp
loan.status = status
db.session.commit()
def to_dict(self):
"""
Convert the Loan object to a dictionary format for JSON serialization.
"""
return {
'id': self.id,
'customer_id': self.customer_id,
'account_id': self.account_id,
'offer_id': self.offer_id,
'principal_amount': self.principal_amount,
'status': self.status,
'created_at': self.created_at.isoformat() if self.created_at else None,
'updated_at': self.updated_at.isoformat() if self.updated_at else None
}
def __repr__(self):
return f'<Loan {self.id}>'