feat: добавлены миксины для работы с идентификаторами и временными метками

- Создан файл `__init__.py` в пакете `lkeep.database.mixins`.
- Добавлен класс `IDMixin` для генерации уникальных идентификаторов.
- Создан файл `id_mixins.py` с реализацией миксина `IDMixin`.
- Добавлены классы `CreatedAtMixin`, `UpdatedAtMixin` и `TimestampsMixin` для управления временными метками в моделях SQLAlchemy.
This commit is contained in:
proDream 2025-01-10 19:22:13 +04:00
parent ac19bb4397
commit a53ffb5213
3 changed files with 83 additions and 0 deletions

View File

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

View File

@ -0,0 +1,23 @@
"""
Проект: Lkeep
Автор: Иван Ашихмин
Год: 2025
Специально для проекта "Код на салфетке"
https://pressanybutton.ru/category/servis-na-fastapi/
"""
import uuid
from sqlalchemy import UUID
from sqlalchemy.orm import Mapped, mapped_column
class IDMixin:
"""
Класс-миксин для добавления уникального идентификатора к объектам.
:ivar id: Уникальный идентификатор объекта.
:type id: uuid.UUID
"""
id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)

View File

@ -0,0 +1,53 @@
"""
Проект: Lkeep
Автор: Иван Ашихмин
Год: 2025
Специально для проекта "Код на салфетке"
https://pressanybutton.ru/category/servis-na-fastapi/
"""
import datetime
from sqlalchemy import DateTime, func
from sqlalchemy.orm import Mapped, mapped_column
class CreatedAtMixin:
"""
Класс-миксин, добавляющий атрибут created_at для отслеживания времени создания объектов.
:ivar created_at: Время создания объекта.
:type created_at: datetime.datetime
"""
created_at: Mapped[datetime.datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(),
default=datetime.datetime.now,
)
class UpdatedAtMixin:
"""
Класс-миксин, добавляющий атрибут `updated_at`, который автоматически обновляется при каждом изменении записи.
:ivar updated_at: Время последнего обновления записи.
:type updated_at: Mapped[datetime.datetime]
"""
updated_at: Mapped[datetime.datetime] = mapped_column(
DateTime(timezone=True), server_default=func.now(), onupdate=func.now()
)
class TimestampsMixin(CreatedAtMixin, UpdatedAtMixin):
"""
Класс-миксин для добавления временных меток создания и обновления в классы.
:ivar created_at: Время создания записи.
:type created_at: datetime.datetime
:ivar updated_at: Время последнего обновления записи.
:type updated_at: datetime.datetime
"""
pass