mnemo_cards/mnemo_cards_backend/CODE_REVIEW_CHECKLIST.md
2026-01-03 16:14:27 +03:00

9.6 KiB
Raw Blame History

Code Review Checklist: Database Improvements (Этапы 7-8)

Дата: 2025-01-XX
Статус: Готово к review


📋 Общая информация

Выполненные этапы

  • Этап 1-2: Инфраструктура (SoftDeleteMixin, новые таблицы)
  • Этап 3: Удаление deprecated полей
  • Этап 4-5: Создание новых DAO и менеджеров
  • Этап 6: Обновление бизнес-логики
  • Этап 7: Тестирование
  • Этап 8: Финализация

Этап 7: Тестирование

Unit тесты

WordStatisticsDao

  • test/database/daos/word_statistics_dao_test.dart создан
  • Тесты для create() - создание новой статистики
  • Тесты для getByUserAndCard() - получение по userId + cardId
  • Тесты для updateStatistics() - обновление статистики
  • Тесты для getPackStatistics() - статистика по паку
  • Тесты для getUserStatistics() - вся статистика пользователя
  • Тесты для soft delete функциональности
  • Тесты для расчета mastery

WordStatisticsManager

  • test/statistics/word_statistics_manager_test.dart создан
  • Тесты для recordAnswer() - создание новой записи
  • Тесты для recordAnswer() - обновление существующей
  • Тесты для calculateMastery() - различные сценарии
  • Тесты для getPackStatistics()
  • Тесты для getUserStatistics()

SoftDeleteMixin

  • test/database/daos/mixins/soft_delete_mixin_test.dart создан
  • Тесты для selectActive() - фильтрация удаленных
  • Тесты для getActiveById() - не возвращает удаленные
  • Тесты для комбинации с where условиями

Integration тесты

  • Обновлены тесты для UsersApiV2 (packProgress, studyDates, categoryMinutes)
    • Примечание: Старые тесты используют Isar, требуют миграции на PostgreSQL
    • Статус: Отложено (требует полной миграции тестовой инфраструктуры)

Smoke тесты

  • test/smoke/smoke_tests.dart создан
  • Тест создания БД без ошибок
  • Тест записи WordStatistics после ответа
  • Тест расчета packProgress
  • Тест расчета studyDates
  • Тест расчета categoryMinutes
  • Тест soft delete функциональности
  • Тест обновления статистики через WordStatisticsManager

Этап 8: Финализация

Документация

README.md

  • Обновлена структура проекта (добавлены новые файлы)
  • Добавлены упоминания WordStatistics и AuditLog таблиц
  • Добавлены упоминания WordStatisticsManager и SoftDeleteMixin

Комментарии в коде

  • WordStatisticsDao - документация методов
  • WordStatisticsManager - документация методов
  • SoftDeleteMixin - документация и примеры использования
  • StatisticsCalculator - обновлена документация методов расчета

Code Review Checklist

Архитектура

  • Все deprecated поля удалены из таблиц
    • UserDatas: words, achievements, packProgress, studyDates, categoryMinutes
    • Payments: packs, subscription
    • GameCards: packId
  • Новые таблицы созданы
    • WordStatistics
    • AuditLogs (инфраструктура)
  • Soft delete добавлен во все таблицы
    • Payments, Tokens, RefreshTokens, TelegramAuthCodes
    • StudySessions, Tests, TestQuestions
    • PromoCodesCampaigns, PromoCodes
    • DiscountCampaigns, Discounts
    • WordStatistics

DAO и менеджеры

  • WordStatisticsDao создан и зарегистрирован
  • AuditDao создан и зарегистрирован
  • WordStatisticsManager создан и интегрирован
  • SoftDeleteMixin создан и используется в DAO
  • StatisticsCalculator обновлен (calculatePackProgress, calculateStudyDates, calculateCategoryMinutes)

Бизнес-логика

  • TestManager интегрирован с WordStatisticsManager
  • UsersApiV2 использует новые методы расчета статистики
  • Расчет packProgress работает с WordStatistics
  • Расчет studyDates работает с StudySessions
  • Расчет categoryMinutes работает с StudySessions

Тестирование

  • Unit тесты для WordStatisticsDao
  • Unit тесты для WordStatisticsManager
  • Unit тесты для SoftDeleteMixin
  • Smoke тесты созданы
  • Integration тесты обновлены (отложено - требует миграции тестовой инфраструктуры)

Код и качество

  • Нет ошибок компиляции
  • Код следует стилю проекта
  • Документация обновлена
  • Комментарии добавлены где необходимо

⚠️ Известные ограничения

Тесты

  1. Integration тесты - старые тесты используют Isar, требуют миграции на PostgreSQL

    • Решение: Созданы новые unit тесты и smoke тесты для PostgreSQL
    • Статус: Отложено до полной миграции тестовой инфраструктуры
  2. Тестовая БД - тесты требуют запущенный PostgreSQL

    • Решение: Используются переменные окружения для настройки подключения
    • Можно использовать Docker Compose для автоматизации

AuditLog

  • Таблица создана, но вызовы auditDao.log() не добавлены в код
  • Причина: Нужно определить какие операции логировать
  • Статус: Инфраструктура готова, использование отложено

🚀 Готовность к деплою

Проверка перед деплоем

Компиляция и сборка

  • dart run build_runner build --delete-conflicting-outputs выполняется без ошибок
  • Нет ошибок компиляции в Dart коде
  • Все зависимости разрешены корректно

Тесты

  • Unit тесты для WordStatisticsDao проходят
  • Unit тесты для WordStatisticsManager проходят
  • Unit тесты для SoftDeleteMixin проходят
  • Smoke тесты проходят
  • Integration тесты проходят (отложено)

Функциональность

  • WordStatistics записываются после submit теста
  • packProgress рассчитывается корректно
  • studyDates рассчитываются корректно
  • categoryMinutes рассчитываются корректно
  • Soft delete работает на нескольких таблицах

Документация

  • README.md обновлен
  • Комментарии в коде добавлены
  • Code review checklist создан

📝 Следующие шаги (после деплоя)

  1. Мониторинг производительности

    • Отслеживать время выполнения calculatePackProgress, calculateStudyDates, calculateCategoryMinutes
    • Если > 500ms, оптимизировать SQL запросы или добавить индексы
  2. Миграция тестовой инфраструктуры

    • Обновить все тесты с Isar на PostgreSQL
    • Создать тестовую БД в Docker Compose
  3. AuditLog использование

    • Определить критичные операции для логирования
    • Добавить вызовы auditDao.log() в PaymentManager, UserManager
    • Настроить retention policy
  4. Оптимизация

    • Добавить индексы на WordStatistics(userId, cardId)
    • Добавить индексы на StudySessions(userId, startTime)
    • Рассмотреть Redis кэширование для статистики

Итоговый статус

Этапы 7-8 выполнены:
Готово к деплою: (с учетом известных ограничений)

Примечание: Integration тесты требуют миграции тестовой инфраструктуры с Isar на PostgreSQL, но это не блокирует деплой, так как:

  • Unit тесты покрывают основную функциональность
  • Smoke тесты проверяют интеграцию
  • Функциональность протестирована вручную