Files
2026-03-17 18:32:44 +03:00

40 lines
1.3 KiB
Python

import enum
import uuid
from sqlalchemy import Boolean, Enum, String
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.models.base import Base, TimestampMixin
class UserRole(str, enum.Enum):
USER = "USER"
ADMIN = "ADMIN"
class User(TimestampMixin, Base):
__tablename__ = "users"
id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
email: Mapped[str] = mapped_column(String(320), unique=True, index=True, nullable=False)
full_name: Mapped[str | None] = mapped_column(String(255), nullable=True)
hashed_password: Mapped[str] = mapped_column(String(255), nullable=False)
role: Mapped[UserRole] = mapped_column(
Enum(UserRole, name="user_role"),
nullable=False,
default=UserRole.USER,
server_default=UserRole.USER.value,
)
is_active: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True, server_default="true")
pipeline_dialogs = relationship(
"PipelineDialog",
back_populates="user",
cascade="all, delete-orphan",
passive_deletes=True,
lazy="selectin",
)
actions = relationship("Action", passive_deletes=True, lazy="selectin")
capabilities = relationship("Capability", passive_deletes=True, lazy="selectin")