from datetime import datetime, timezone from sqlalchemy.orm import relationship from app.extensions import db from sqlalchemy.exc import IntegrityError from sqlalchemy.sql import func class Account(db.Model): __tablename__ = 'accounts' id = db.Column(db.String(50), primary_key=True) customer_id = db.Column(db.String(50), nullable=False) account_type = db.Column(db.String(50)) status = db.Column(db.String(20), default='active') lien_amount = db.Column(db.Float, default=0.0) created_at = db.Column(db.DateTime(timezone=True), server_default=func.now()) updated_at = db.Column(db.DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) # customer = relationship( # "Customer", # primaryjoin="Customer.id == Account.customer_id", # foreign_keys=[customer_id], # back_populates="accounts", # ) @classmethod def create_account(cls, id, customer_id, account_type, status='active'): account = cls( id=id, customer_id=customer_id, account_type=account_type, created_at=datetime.now(timezone.utc), updated_at=datetime.now(timezone.utc) ) try: db.session.add(account) except IntegrityError as err: raise ValueError(f"Database integrity error: {err}") return account @classmethod def is_valid_account(cls, account_id, customer_id): account = cls.query.filter_by(id=account_id, customer_id=customer_id).first() if not account: return False if account.lien_amount > 0: return False return account def __repr__(self): return f''