from datetime import datetime from sqlalchemy import Boolean from sqlalchemy import DateTime from sqlalchemy import ForeignKey from sqlalchemy import String from sqlalchemy import func from sqlalchemy.orm import relationship from sqlalchemy.orm import Mapped from sqlalchemy.orm import mapped_column from app.db.database import Base class User(Base): __tablename__ = "users" id: Mapped[int] = mapped_column(primary_key=True) first_name: Mapped[str] = mapped_column( String(100), default="", server_default="" ) last_name: Mapped[str] = mapped_column( String(100), default="", server_default="" ) username: Mapped[str] = mapped_column( String(50), unique=True, index=True ) email: Mapped[str] = mapped_column( String(255), unique=True ) password_hash: Mapped[str] = mapped_column( String(255) ) role: Mapped[str] = mapped_column( String(50), default="user", server_default="user" ) role_id: Mapped[int] = mapped_column( ForeignKey("roles.id"), index=True, ) primary_role = relationship("Role", lazy="joined") is_active: Mapped[bool] = mapped_column( Boolean, default=True, server_default="true" ) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now() ) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), onupdate=func.now() )