from sqlalchemy import Column, Integer, String, DateTime, Boolean, Enum from sqlalchemy.orm import relationship from datetime import datetime import enum from app.db.base import Base class UserRole(str, enum.Enum): USER = "user" ADMIN = "admin" SUPER_ADMIN = "super_admin" class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) email = Column(String, unique=True, index=True, nullable=False) full_name = Column(String, nullable=False) phone = Column(String, nullable=True) hashed_password = Column(String, nullable=False) role = Column(Enum(UserRole), default=UserRole.USER, nullable=False) is_active = Column(Boolean, default=True) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) gym_memberships = relationship("GymMembership", back_populates="user") subscriptions = relationship("Subscription", back_populates="user") transactions = relationship("Transaction", back_populates="user") invited_by = Column(Integer, nullable=True)