"""User model""" from sqlalchemy import Column, Integer, String, DateTime, Boolean, Text from sqlalchemy.orm import relationship from datetime import datetime from app.db.database import Base class User(Base): """User model - represents a user with email/password or Telegram binding""" __tablename__ = "users" id = Column(Integer, primary_key=True) # Authentication - Email/Password email = Column(String(255), unique=True, nullable=True, index=True) password_hash = Column(String(255), nullable=True) # Authentication - Telegram telegram_id = Column(Integer, unique=True, nullable=True, index=True) # User info username = Column(String(255), nullable=True) first_name = Column(String(255), nullable=True) last_name = Column(String(255), nullable=True) phone = Column(String(20), nullable=True) # Account status is_active = Column(Boolean, default=True) email_verified = Column(Boolean, default=False) # Timestamps created_at = Column(DateTime, default=datetime.utcnow, nullable=False) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) last_activity = Column(DateTime, nullable=True) # Relationships family_members = relationship("FamilyMember", back_populates="user") accounts = relationship("Account", back_populates="owner") transactions = relationship("Transaction", back_populates="user") def __repr__(self) -> str: auth_method = "email" if self.email else "telegram" if self.telegram_id else "none" return f""