from sqlalchemy import Column, DateTime, ForeignKey, Integer, String, Text, text from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import relationship from sqlalchemy.sql import func from backend.app.db.base import Base class User(Base): __tablename__ = "users" id = Column(UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()")) name = Column(String, nullable=False) account = Column(String, unique=True, nullable=False) phone = Column(String) title = Column(String) avatar = Column(Text) external_user_id = Column(String) tenant_id = Column(String) tenant_name = Column(String) hosp_id = Column(String) hosp_name = Column(String) role_id = Column(UUID(as_uuid=True), ForeignKey("roles.id", ondelete="RESTRICT"), nullable=False) campus_id = Column(UUID(as_uuid=True), ForeignKey("campuses.id", ondelete="SET NULL")) dept_id = Column(UUID(as_uuid=True), ForeignKey("departments.id", ondelete="SET NULL")) status = Column(String, nullable=False, server_default="active") password_hash = Column(String, nullable=False) token_version = Column(Integer, nullable=False, server_default="1") created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False) role = relationship("Role", lazy="joined") campus = relationship("Campus", lazy="joined") department = relationship("Department", lazy="joined")