from datetime import datetime, timezone from app.extensions import db from app.models.charge import Charge from sqlalchemy.orm import relationship from sqlalchemy.sql import func from sqlalchemy.exc import IntegrityError class Payments(db.Model): __tablename__ = 'payments' id = db.Column( db.Integer, primary_key=True, autoincrement=True, ) uid = db.Column(db.String(150), nullable=True) member_id = db.Column(db.Integer, nullable=False) product_id = db.Column(db.String(25), nullable=False) processor = db.Column(db.String(25), nullable=False) status = db.Column(db.Integer, nullable=True, default=1) added = db.Column(db.DateTime(timezone=True), server_default=func.now()) updated = db.Column(db.DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) @classmethod def add_payment(cls, customer_id, account_id, transaction_id, data=None): # Save the response rac_check = cls( customer_id=customer_id, account_id=account_id, transaction_id=transaction_id, added=datetime.now(timezone.utc), updated=datetime.now(timezone.utc) ) try: db.session.add(rac_check) except IntegrityError as err: raise ValueError(f"Database integrity error: {err}") return rac_check def to_dict(self): return { "offerId": self.id, "productId": self.product_id, "minAmount": self.min_amount, "maxAmount": self.max_amount, "tenor": self.tenor, "interest_rate": self.interest_rate, "management_rate": self.management_rate, "insurance_rate": self.insurance_rate, "vat_rate": self.vat_rate, "maxDailyLoans": self.max_daily_loans, "maxActiveLoans": self.max_active_loans, "maxLifeLoans": self.max_life_loans } def __repr__(self): return f''