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 import uuid class PaymentsSession(db.Model): __tablename__ = 'payments_session' 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) option_name = db.Column(db.String(100), nullable=False) processor = db.Column(db.String(25), nullable=False) session_id = db.Column(db.String(150), 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 get_payment_session_with_session_id(cls, session_id): paySession = cls.query.filter_by(session_id=session_id).first() if not paySession: raise ValueError(f"paySession with ID {session_id} does not exist.") return paySession @classmethod def add_payment_session(cls, member_id, option_name, processor, session_id): # save the response session_data = cls( uid=str(uuid.uuid4()), member_id=member_id, option_name=option_name, processor=processor, session_id=session_id, added=datetime.now(timezone.utc), updated=datetime.now(timezone.utc) ) try: db.session.add(session_data) except IntegrityError as err: raise ValueError(f"database integrity error: {err}") return session_data def to_dict(self): return { "id": self.id, "uid": self.uid, "member_id": self.member_id, "option_name": self.option_name, "processor": self.processor, "session_id": self.session_id, "status": self.status, "added": self.added, "updated": self.updated } def __repr__(self): return f''