Сохранять userStates в SQLite вместо in-memory Map #59

Closed
opened 2026-06-17 19:39:40 +00:00 by NW · 1 comment
Owner

Проблема

src/context/userStates.js использует new Map() — все состояния теряются при рестарте. Нет TTL, нет лимита размера → утечка памяти.

Решение

  • Создать таблицу user_states в SQLite (user_id, state_key, state_data, updated_at)
  • Создать src/services/stateService.js с методами get/set/delete
  • Добавить TTL — удалять состояния старше 24ч
  • Заменить Map на stateService в index.js
  • Добавить cleanup-задачу (раз в час)

Приоритет: СРЕДНИЙ

## Проблема `src/context/userStates.js` использует `new Map()` — все состояния теряются при рестарте. Нет TTL, нет лимита размера → утечка памяти. ## Решение - [ ] Создать таблицу `user_states` в SQLite (user_id, state_key, state_data, updated_at) - [ ] Создать `src/services/stateService.js` с методами get/set/delete - [ ] Добавить TTL — удалять состояния старше 24ч - [ ] Заменить Map на stateService в index.js - [ ] Добавить cleanup-задачу (раз в час) ## Приоритет: СРЕДНИЙ
NW added this to the Phase 2: Architecture & Refactoring milestone 2026-06-17 19:39:40 +00:00
NW added the priority::mediumtype::featurephase::2 labels 2026-06-17 19:39:40 +00:00
Author
Owner

Реализовано

  • Создать таблицу user_states в SQLite (chat_id PK, state_data JSON, updated_at)
  • Создать src/services/stateService.js с методами get/set/delete/has
  • TTL 24 часа — expired states auto-deleted
  • Cleanup job раз в час (setInterval)
  • Заменить Map на async stateService proxy в src/context/userStates.js
  • Добавить await к 45 вызовам userStates.get/set/delete/has в 13 файлах
  • await initStates() в index.js при старте
  • Миграция 004_user_states

Коммит: a04e60d

## ✅ Реализовано - [x] Создать таблицу `user_states` в SQLite (chat_id PK, state_data JSON, updated_at) - [x] Создать `src/services/stateService.js` с методами get/set/delete/has - [x] TTL 24 часа — expired states auto-deleted - [x] Cleanup job раз в час (setInterval) - [x] Заменить Map на async stateService proxy в `src/context/userStates.js` - [x] Добавить `await` к 45 вызовам userStates.get/set/delete/has в 13 файлах - [x] `await initStates()` в index.js при старте - [x] Миграция 004_user_states **Коммит**: a04e60d
NW closed this issue 2026-06-22 09:03:13 +00:00
Sign in to join this conversation.