Files
lkeep/lkeep/database/mixins/timestamp_mixins.py
proDream a53ffb5213 feat: добавлены миксины для работы с идентификаторами и временными метками
- Создан файл `__init__.py` в пакете `lkeep.database.mixins`.
- Добавлен класс `IDMixin` для генерации уникальных идентификаторов.
- Создан файл `id_mixins.py` с реализацией миксина `IDMixin`.
- Добавлены классы `CreatedAtMixin`, `UpdatedAtMixin` и `TimestampsMixin` для управления временными метками в моделях SQLAlchemy.
2025-01-10 19:22:13 +04:00

54 lines
1.7 KiB
Python

"""
Проект: 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