Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[db] add migrations and some optimizations of queries #1

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

capcom6
Copy link

@capcom6 capcom6 commented Jun 3, 2024

Просьба воспринимать все ниже написанное исключительно в качестве рекомендаций по дальнейшему изучению, если данная тема действительно интересна, без цели как-то раскритиковать проект. Буду рад ответить на любые вопросы в рамках описанных ниже пунктов. Этот PR касается в первую очередь работы с БД.

  1. Использование встроенного в sqlite механизма миграций. Можно было, конечно, изобрести велосипед с PRAGMA user_version, но это на самостоятельное изучение.
  2. Поле username сделано уникальным. Но пока там хранится не уникальный ИД, а имя пользователя - это все очень сомнительно. Если уникальность ctx.from.username еще имеет место быть, то уж ctx.from.first_name может повторяться. Если бы это было "боевое" приложение, то пришлось бы заморочиться с миграцией без потери данных - на самостоятельное изучение.
  3. Поле last_played оставлено как есть NOT NULL потому что в SQLite достаточно ограниченные возможности ALTER TABLE в части работы со столбцами. Как и п.2 это повод уделять больше внимания проектированию БД, чтобы потом не разгребать последствия. Как убрать NOT NULL у столбца тоже на самостоятельное изучение.
  4. Применен upsert-подход, чтобы одним запросом можно было и создать запись, если ее нет, и обновить, если она есть.

Что не сделано, но руки чешутся:

  1. Вынести работу с БД в отдельный модуль.
  2. Поскольку сессии живут в оперативной памяти, то любое падение бота их обнуляет. И очень обидно когда набрал уже много очков в рамках одной сессии, а потом бот падает и все теряется. Стоит использовать либо внешнее хранилище для сессий (см. https://grammy.dev/plugins/session#known-storage-adapters), либо хотя бы скидывать результат в БД после любого ответа, а не только неправильного.

Спасибо за возможность познакомиться с новыми библиотеками на данном проекте.

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.

1 participant