From a53ffb52131af2135c1d793205794e807a63b20d Mon Sep 17 00:00:00 2001 From: proDream Date: Fri, 10 Jan 2025 19:22:13 +0400 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BC=D0=B8=D0=BA=D1=81=D0=B8=D0=BD=D1=8B?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20?= =?UTF-8?q?=D1=81=20=D0=B8=D0=B4=D0=B5=D0=BD=D1=82=D0=B8=D1=84=D0=B8=D0=BA?= =?UTF-8?q?=D0=B0=D1=82=D0=BE=D1=80=D0=B0=D0=BC=D0=B8=20=D0=B8=20=D0=B2?= =?UTF-8?q?=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD=D1=8B=D0=BC=D0=B8=20=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D0=BA=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Создан файл `__init__.py` в пакете `lkeep.database.mixins`. - Добавлен класс `IDMixin` для генерации уникальных идентификаторов. - Создан файл `id_mixins.py` с реализацией миксина `IDMixin`. - Добавлены классы `CreatedAtMixin`, `UpdatedAtMixin` и `TimestampsMixin` для управления временными метками в моделях SQLAlchemy. --- lkeep/database/mixins/__init__.py | 7 +++ lkeep/database/mixins/id_mixins.py | 23 ++++++++++ lkeep/database/mixins/timestamp_mixins.py | 53 +++++++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 lkeep/database/mixins/__init__.py create mode 100644 lkeep/database/mixins/id_mixins.py create mode 100644 lkeep/database/mixins/timestamp_mixins.py diff --git a/lkeep/database/mixins/__init__.py b/lkeep/database/mixins/__init__.py new file mode 100644 index 0000000..c30336a --- /dev/null +++ b/lkeep/database/mixins/__init__.py @@ -0,0 +1,7 @@ +""" +Проект: Lkeep +Автор: Иван Ашихмин +Год: 2025 +Специально для проекта "Код на салфетке" +https://pressanybutton.ru/category/servis-na-fastapi/ +""" diff --git a/lkeep/database/mixins/id_mixins.py b/lkeep/database/mixins/id_mixins.py new file mode 100644 index 0000000..a69b10d --- /dev/null +++ b/lkeep/database/mixins/id_mixins.py @@ -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) diff --git a/lkeep/database/mixins/timestamp_mixins.py b/lkeep/database/mixins/timestamp_mixins.py new file mode 100644 index 0000000..a5d2d8e --- /dev/null +++ b/lkeep/database/mixins/timestamp_mixins.py @@ -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