feat: добавлены миксины для работы с идентификаторами и временными метками
- Создан файл `__init__.py` в пакете `lkeep.database.mixins`. - Добавлен класс `IDMixin` для генерации уникальных идентификаторов. - Создан файл `id_mixins.py` с реализацией миксина `IDMixin`. - Добавлены классы `CreatedAtMixin`, `UpdatedAtMixin` и `TimestampsMixin` для управления временными метками в моделях SQLAlchemy.
This commit is contained in:
parent
ac19bb4397
commit
a53ffb5213
7
lkeep/database/mixins/__init__.py
Normal file
7
lkeep/database/mixins/__init__.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
"""
|
||||||
|
Проект: Lkeep
|
||||||
|
Автор: Иван Ашихмин
|
||||||
|
Год: 2025
|
||||||
|
Специально для проекта "Код на салфетке"
|
||||||
|
https://pressanybutton.ru/category/servis-na-fastapi/
|
||||||
|
"""
|
23
lkeep/database/mixins/id_mixins.py
Normal file
23
lkeep/database/mixins/id_mixins.py
Normal 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)
|
53
lkeep/database/mixins/timestamp_mixins.py
Normal file
53
lkeep/database/mixins/timestamp_mixins.py
Normal 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
|
Loading…
x
Reference in New Issue
Block a user