feat: добавлен модуль базы данных и модели пользователя

- Создан файл `__init__.py` в папке `lkeep/database/models` для инициализации модуля.
- Создан класс `Base` в `base.py` как базовый класс для всех ORM-моделей.
- Добавлена модель `User` в `user.py`, представляющая пользователя с необходимыми атрибутами.
This commit is contained in:
proDream 2025-01-10 19:22:32 +04:00
parent a53ffb5213
commit e8de7e21f2
4 changed files with 82 additions and 0 deletions

View File

@ -0,0 +1,7 @@
"""
Проект: Lkeep
Автор: Иван Ашихмин
Год: 2025
Специально для проекта "Код на салфетке"
https://pressanybutton.ru/category/servis-na-fastapi/
"""

View File

@ -0,0 +1,13 @@
"""
Проект: Lkeep
Автор: Иван Ашихмин
Год: 2025
Специально для проекта "Код на салфетке"
https://pressanybutton.ru/category/servis-na-fastapi/
"""
from lkeep.database.models.base import Base
from lkeep.database.models.user import User
__all__ = ("Base", "User")

View File

@ -0,0 +1,25 @@
"""
Проект: Lkeep
Автор: Иван Ашихмин
Год: 2025
Специально для проекта "Код на салфетке"
https://pressanybutton.ru/category/servis-na-fastapi/
"""
from sqlalchemy.orm import DeclarativeBase, declared_attr
class Base(DeclarativeBase):
"""
Базовый класс для моделей ORM, использующих SQLAlchemy.
"""
@declared_attr.directive
def __tablename__(cls) -> str:
"""
Определяет название таблицы в базе данных на основе имени класса.
:return: Название таблицы в формате snake_case.
:rtype: str
"""
return cls.__name__.lower()

View File

@ -0,0 +1,37 @@
"""
Проект: Lkeep
Автор: Иван Ашихмин
Год: 2025
Специально для проекта "Код на салфетке"
https://pressanybutton.ru/category/servis-na-fastapi/
"""
from sqlalchemy import Boolean, String, Text
from sqlalchemy.orm import Mapped, mapped_column
from lkeep.database.mixins.id_mixins import IDMixin
from lkeep.database.mixins.timestamp_mixins import TimestampsMixin
from lkeep.database.models.base import Base
class User(IDMixin, TimestampsMixin, Base):
"""
Класс User представляет пользователя в системе.
:ivar email: Email адрес пользователя.
:type email: str
:ivar hashed_password: Хэшированный пароль пользователя.
:type hashed_password: str
:ivar is_active: Флаг активности пользователя (True или False).
:type is_active: bool
:ivar is_superuser: Флаг суперпользователя (True или False).
:type is_superuser: bool
:ivar is_verified: Флаг подтверждения аккаунта (True или False).
:type is_verified: bool
"""
email: Mapped[str] = mapped_column(String(100), unique=True, nullable=False)
hashed_password: Mapped[str] = mapped_column(Text, unique=False, nullable=False)
is_active: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
is_superuser: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
is_verified: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)