diff --git a/app/models/transaction_offers.py b/app/models/transaction_offers.py new file mode 100644 index 0000000..f7ce5fd --- /dev/null +++ b/app/models/transaction_offers.py @@ -0,0 +1,66 @@ +from datetime import datetime, timezone +from app.extensions import db +from sqlalchemy.orm import relationship +from sqlalchemy.sql import func +import logging +logger = logging.getLogger(__name__) + + + +class TransactionOffer(db.Model): + __tablename__ = 'transaction_offers' + + id = db.Column(db.Integer, primary_key=True, autoincrement=True) + customer_id = db.Column(db.String(50), nullable=False) + transaction_id = db.Column(db.String(50), nullable=False) + original_transaction = db.Column(db.String(50), nullable=True) + offer_id = db.Column(db.String(20), nullable=False) + product_id = db.Column(db.String(20), nullable=True) + min_amount = db.Column(db.Float, nullable=False) + max_amount = db.Column(db.Float, nullable=False) + eligible_amount = db.Column(db.Float, nullable=True) + tenor = db.Column(db.Integer, nullable=True) # tenor in months, typically + + created_at = db.Column(db.DateTime(timezone=True), server_default=func.now()) + updated_at = db.Column(db.DateTime(timezone=True), onupdate=func.now()) + customer = relationship( + "Customer", + primaryjoin="Customer.id == TransactionOffer.customer_id", + foreign_keys=[customer_id], + back_populates="transaction_offers", + ) + + @classmethod + + def is_valid_transaction_offer(cls, transaction_offer, customer_id, product_id): + transaction_offer = cls.query.filter_by( + id = transaction_offer, + customer_id = customer_id, + # product_id = product_id + # transaction_id = transaction_id, + ).first() + + + if not transaction_offer: + return False + return transaction_offer + + + + def to_dict(self): + return { + 'id': self.id, + 'customerId': self.customer_id, + 'transactionId': self.transaction_id, + 'offerId': self.offer_id, + 'productId': self.product_id, + 'minAmount': self.min_amount, + 'maxAmount': self.max_amount, + 'eligibleAmount': self.eligible_amount, + 'tenor': self.tenor, + 'createdAt': self.created_at.isoformat() if self.created_at else None, + 'updatedAt': self.updated_at.isoformat() if self.updated_at else None, + } + + def __repr__(self): + return f''