user.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import enum
  2. from sqlalchemy import Column, Integer, String, Enum, DateTime, ForeignKey
  3. from sqlalchemy.sql import func
  4. from sqlalchemy.orm import relationship
  5. from app.core.database import Base
  6. class UserStatus(str, enum.Enum):
  7. PENDING = "PENDING" # Waiting for approval
  8. ACTIVE = "ACTIVE" # Approved and active
  9. DISABLED = "DISABLED" # Manually disabled by admin
  10. class UserRole(str, enum.Enum):
  11. SUPER_ADMIN = "SUPER_ADMIN"
  12. DEVELOPER = "DEVELOPER"
  13. ORDINARY_USER = "ORDINARY_USER"
  14. class User(Base):
  15. __tablename__ = "users"
  16. id = Column(Integer, primary_key=True, index=True)
  17. mobile = Column(String(20), unique=True, index=True, nullable=False)
  18. password_hash = Column(String(128), nullable=False)
  19. salt = Column(String(64), nullable=True)
  20. name = Column(String(100), nullable=True, comment="User Chinese Name")
  21. english_name = Column(String(100), nullable=True, comment="User English Name (Pinyin)")
  22. organization_id = Column(Integer, ForeignKey("organizations.id"), nullable=True)
  23. organization = relationship("Organization", back_populates="users")
  24. status = Column(Enum(UserStatus), default=UserStatus.PENDING, nullable=False)
  25. role = Column(Enum(UserRole), default=UserRole.DEVELOPER, nullable=False)
  26. is_deleted = Column(Integer, default=0, nullable=False) # 0: False, 1: True (Soft Delete)
  27. created_at = Column(DateTime(timezone=True), server_default=func.now())
  28. updated_at = Column(DateTime(timezone=True), onupdate=func.now(), server_default=func.now())