DoSoapCalc/docs/PLAN.md
DosAi 88ed4b3580 docs: Add knowledge base, project rules and organize documentation
- Created .cursorrules for development context

- Added KNOWLEDGE_BASE.md with architecture details

- Added PROJECT_RULES.md with coding standards

- Updated README.md with project overview

- Moved CHANGELOG.md and PLAN.md to docs/ folder

- Updated CHANGELOG.md with latest changes
2025-11-02 16:09:30 +03:00

5.9 KiB
Raw Permalink Blame History

План работ: Модульная архитектура калькуляторов

Статус выполнения

  • Создать систему типов (calculator-types.ts) с FieldConfig, CalculationStep, SubtotalConfig, CalculatorConfig
  • Вынести калькулятор мыла в модуль (calculators/soap/config.ts и calc.ts)
  • Создать универсальный компонент CalculatorEngine.tsx для динамического рендеринга и расчетов
  • Создать компонент CalculatorMenu.tsx для выбора калькулятора на главной странице
  • Создать систему регистрации калькуляторов (calculator-registry.ts)
  • Обновить app/page.tsx для отображения меню выбора калькулятора
  • Адаптировать backend/bot.js для универсальной обработки разных калькуляторов
  • Удалить старые файлы SoapCalculator.tsx и calc.ts после миграции
  • Создать документацию по созданию калькуляторов (calculator-creation-guide.md)
  • Создать CHANGELOG.md с описанием изменений
  • Создать PLAN.md с планом работ и отслеживанием прогресса

Выполненные задачи

Этап 1: Система типов

  • Создан файл frontend/lib/calculator-types.ts
  • Определены типы: FieldConfig, CalculationStep, SubtotalConfig, CalculatorConfig
  • Поддержка типов полей: text, number, file
  • Типы для результатов расчетов: CalculatorValues, CalculationResults

Этап 2: Модуль калькулятора мыла

  • Создана папка frontend/calculators/soap/
  • Создан файл calc.ts с функциями расчета
  • Создан файл config.ts с полной конфигурацией калькулятора мыла
  • Все поля, формулы и подитоги перенесены в модуль

Этап 3: Универсальные компоненты

  • Создан CalculatorEngine.tsx — динамический рендеринг на основе конфигурации
  • Создан CalculatorMenu.tsx — меню выбора калькулятора
  • Обновлен app/page.tsx для использования меню

Этап 4: Система регистрации

  • Создан calculator-registry.ts для управления калькуляторами
  • Реализованы функции: registerCalculator, getCalculator, getAllCalculators
  • Автоматическая инициализация при импорте

Этап 5: Адаптация бэкенда

  • Обновлен backend/bot.js для универсальной обработки
  • Поддержка готовых сообщений из конфигурации калькулятора
  • Fallback на универсальное форматирование при отсутствии formatTelegramMessage

Этап 6: Очистка

  • Удален старый SoapCalculator.tsx
  • Удален старый calc.ts
  • Все зависимости обновлены

Этап 7: Документация

  • Создано руководство docs/calculator-creation-guide.md
  • Создан CHANGELOG.md
  • Создан PLAN.md (этот файл)

Следующие шаги (будущие улучшения)

Возможные улучшения

  • Добавить валидацию полей на основе конфигурации
  • Добавить поддержку условных полей (показывать/скрывать в зависимости от значений)
  • Добавить поддержку групп полей с показом расчетов между группами
  • Создать пример калькулятора свечей для демонстрации
  • Добавить тесты для модульной системы
  • Улучшить обработку ошибок валидации
  • Добавить поддержку единиц измерения (г, кг, шт и т.д.)
  • Добавить сохранение истории расчетов (локально)

Структура проекта

frontend/
  calculators/          # Модули калькуляторов
    soap/
      config.ts         # Конфигурация калькулятора мыла
      calc.ts           # Функции расчета
    candles/
      config.ts         # Конфигурация калькулятора свечей
      calc.ts           # Функции расчета
  components/
    CalculatorEngine.tsx # Универсальный компонент
    CalculatorMenu.tsx   # Меню выбора
  lib/
    calculator-types.ts  # Типы системы
    calculator-registry.ts # Реестр калькуляторов
  app/
    page.tsx            # Главная страница с меню
  docs/
    calculator-creation-guide.md # Руководство

backend/
  bot.js                # Универсальный обработчик API

Как добавить новый калькулятор

  1. Создать папку frontend/calculators/[название]/
  2. Создать файл config.ts с конфигурацией
  3. Опционально создать calc.ts для сложных расчетов
  4. Зарегистрировать в calculator-registry.ts

Подробные инструкции в frontend/docs/calculator-creation-guide.md