Как стать автором
Обновить

Телеграм-бот для бронирования столов на вебхуках: FastAPI, Aiogram Dialog, FastStream и RabbitMQ в единой экосистеме

Время на прочтение64 мин
Количество просмотров14K
Всего голосов 22: ↑21 и ↓1+22
Комментарии13

Комментарии 13

Жалко, что на Хабре из 80+ статей в день, только единицы, как ваша. Мне понравилось.

Только немного не хватает про особенности ACID в СУБД SQLite - здесь нет чётко определенных уровней изоляции. В продакшене используют PostgreSQL или ему подобные с установлением уровня изоялции (буква I в ACID).

engine = create_async_engine(
            "postgresql+asyncpg://postgres:postgres@localhost/test",
            future=True,
            isolation_level="READ COMMITTED", # зависит от случая
        )

телеграмм канал «Легкий путь в Python».

Лёгкий путь в Python - это когда вы целый день занимаетесь этим. Вникаете в каждую технологию, пишите код, тестируете его, выкладываете на боевые сервера. Другого пути просто нет. Если вам это нравится, вы получаете от этого кайф - то путь для вас будет действительно лёгким, иначе...

Да, сайт будет лучше бота для данной задачи. Но цель статьи показать не как решалась задача бронирования столов, а построение архитектуры проекта на вебхуках с указанным автором стеком технологий, а бронирование столов - пример задачи.

Не нравится такой пример, вот вам другой: создание системы зеркал бота, чтобы снизить нагрузку на лимиты API Telegram. Для таких проектов накладно держать много соединений через поллинг и их вешают на вебхуки.

К слову, о статье. Наконец-то не что-то вроде "вот вам очередная инструкция с примерами из документации, подпишитесь на мой канал", а годный контент. Спасибо автору.

У автора большое количество отличных статей. Прямо глоток свежего воздуха на фоне современного хабра с вкатунами, штампующими примитивный бред в ленту с помощью ChatGPT

Сидишь на Хабре, по привычке, смотришь как контент, а вместе с ним и аудитория, деградируют. Грустишь...

А потом натыкаешься на такой материал и хорошо...

Спасибо за работу. Пусть мне и не понадобится, но сохранил )

А почему created_at и updated_at вынесены в базовый класс моделей, а

id: Mapped[int] = mapped_column(BigInteger, primary_key=True)

для каждой модели свой? Хоть и одинаковый

Это случаем не чтобы при создании таблиц колонки с id шли первыми?

Такой подход позволяет уменьшить дублирование кода. Если определенные колонки предусмотрены в каждой таблице, то достаточно их вынести в базовый класс. Далее, все модели, кторые будут наследоваться от этого базового класса, получат эти колонки

Это понятно.

Не понятно почему в базовый класс не вынесен

id: Mapped[int] = mapped_column(BigInteger, primary_key=True)

Нет смысла всем колонкам айди присваивать BigInt там обычно идет int4/serial . Просто вопрос оптимизации и веса базы данных.

интереснейший контент у автора, узнаю для себя много нового, тк только начал изучать backend

Зарегистрируйтесь на Хабре, чтобы оставить комментарий