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''