Skip to content

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

Open
capcom6 wants to merge 1 commit into
FilimonovAlexey:mainfrom
capcom6:feature/db-queries-optimization
Open

[db] add migrations and some optimizations of queries#1
capcom6 wants to merge 1 commit into
FilimonovAlexey:mainfrom
capcom6:feature/db-queries-optimization

Conversation

@capcom6

@capcom6 capcom6 commented Jun 3, 2024

Copy link
Copy Markdown

Просьба воспринимать все ниже написанное исключительно в качестве рекомендаций по дальнейшему изучению, если данная тема действительно интересна, без цели как-то раскритиковать проект. Буду рад ответить на любые вопросы в рамках описанных ниже пунктов. Этот 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