From fb3ba2f6d97360b411e03899c1454d337b39dd56 Mon Sep 17 00:00:00 2001 From: host Date: Sun, 9 Aug 2026 14:22:12 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D1=8C=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/models.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 backend/app/models.py diff --git a/backend/app/models.py b/backend/app/models.py new file mode 100644 index 0000000..1bf4d5e --- /dev/null +++ b/backend/app/models.py @@ -0,0 +1,33 @@ +from datetime import datetime, timezone +from enum import Enum + +from sqlalchemy import Boolean, DateTime, Enum as SqlEnum, Integer, String +from sqlalchemy.orm import Mapped, mapped_column + +from .database import Base + + +class UserRole(str, Enum): + """Роли пользователей панели.""" + + admin = "admin" + client = "client" + + +class User(Base): + """Пользователь панели с Argon2id-хешем пароля.""" + + __tablename__ = "users" + + id: Mapped[int] = mapped_column(Integer, primary_key=True) + email: Mapped[str] = mapped_column(String(320), unique=True, index=True) + password_hash: Mapped[str] = mapped_column(String(512)) + role: Mapped[UserRole] = mapped_column( + SqlEnum(UserRole), default=UserRole.client, nullable=False + ) + is_active: Mapped[bool] = mapped_column(Boolean, default=True, nullable=False) + created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), + default=lambda: datetime.now(timezone.utc), + nullable=False, + )