Skip to content

Conversation

vladimirgubarik
Copy link
Contributor

Changes in this Pull Request

  • Added dependency-injector
  • Code reorganized following Clean Architecture principles
  • Replaced all implicit variable injections via state and ctx with explicit injection using dependency-injector
  • Updated testing approach — now using testcontainers
  • Added automatic parsing of bot command parameters in handlers via Pydantic models
  • Added an example of working with database writes through the chain:
    Collector Handler → Command Handler → Unit of Work → Use Case → Repository → Database

Copy link

@osovskiyalexandr osovskiyalexandr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Шаблон не должен содержать бизнес-логику.

После удаления, вернусь к ревью

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Все что касается redis repo посмотри в email-smartapp/-/merge_requests/242 - там был разбор этой темы.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • важно держать "тяжёлые" подключения и пуллы соединений в единственном экземпляре на процесс (AsyncEngine SQLAlchemy, async_sessionmaker и redis.Redis). SQLAlchemy engine стоит сдлеать как Resource или Singleton, в session_factory стоит сделать bind на engine(не збадуь), ну и клиента через Pool. Плюс добавь сюда TODO для поддержки работы с redis sentinel.
  • всё что "лёгкое" и/или должно создаваться на запрос/единицу работы - поднимать фабриками. Repository на конкретную ASyncSession, UseCase на конкретную репу, Uow. Это позволит иметь "чистые" границы транзакции, повысит потокобезоспаность и тестируемость.
  • всё что "реестр команд/маршрутов", лучше собирать на старте и передавать уже готовым списком в Bot/Router, а не отдавать "ленивые провайдеры" дальше по стеку. Это даст тебе возможность детерменированного старта и выявления ошибок при запуске, а не использовании; не будут течь провайдеры в сторонние фреймворки

return self

@abstractmethod
@abstractmethod

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2 раза??

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Чтоб наверняка)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants