dta icon indicating copy to clipboard operation
dta copied to clipboard

refactor: edit DB layer with SQLAlchemy 2.0, migrate to uv

Open Czertilla opened this issue 7 months ago • 0 comments

📌 Основные изменения

✅ Перевод проекта на uv вместо poetry

  • Удалён poetry.lock от Poetry и добавлен аналог от uv uv.lock
  • pyproject.toml переписан под uv
  • Добавлен requirements.txt для возможности простой сборки

🧠 Рефактор моделей под SQLAlchemy 2.0

  • Использование декларативного стиля SQLAlchemy 2.0 (Annotated Declarative Table Forms)
  • Модуль моделей преобразован в полноценный пакет с __init__.py
  • Упрощён и структурирован импорт моделей

🗃️ Новый пакет database

  • Новый модуль database, инкапсулирующий взаимодействие с базами данных

  • Подпакет database.sqlalchemy содержит:

    • Базовую модель и репозиторий efe0321e524e2acb507166e8db4b312d7f56b7a1
    • Набор TypeDecorator-ов вынесен в отдельный модуль 91c0a5f45619da97016805cd5cae45898d72d178
    • Миксины (например, TimestampMixin (1a4d4a5), IDRepositoryMixin (e0502f9))
    • Обёртки для sessionmaker, engine и пр. b379135e28c68edc60117964a529b625988f6d83
    • Прокси класс RepositoryProxy для обратной совместимости f51e89004f0053847c02dcb89a6b7a5da6652ee2

🧩 Рефакторинг репозиториев

  • Использование нового SQLAlchemy query builder API (select(), update(), insert() и пр.)
  • Удаление использования контекстного менеджера внутри репозиториев
  • Репозитории теперь принимают сущность класса Session как аргумент конструктора
  • Добавлен прокси-класс в AppDatabase, поддерживающий старую логику и обеспечивающий плавный переход cdc827726f067b547121c96c6e71b4fa9a4c5830
  • Полная поддержка транзакций и внешнего управления сессиями
  • Улучшено покрытие тестами и читаемость

⚙️ Обратная совместимость

  • Поддержана обратная совместимость через прокси-класс

🔍 Контекст

Этот рефактор направлен на упрощение архитектуры и улучшение гибкости системы управления базой данных, а также соответствие современным практикам SQLAlchemy 2.0. Он создаёт устойчивую основу для поддержки различных СУБД и более чистого, модульного кода.

Czertilla avatar Jun 03 '25 21:06 Czertilla