148 lines
4.4 KiB
Markdown
148 lines
4.4 KiB
Markdown
# DoSoapCalc
|
||
|
||
Калькулятор себестоимости изделий ручной работы с отправкой результатов в Telegram.
|
||
|
||
## Описание
|
||
|
||
DoSoapCalc - это система для расчёта себестоимости различных изделий ручной работы (мыло, свечи и др.) с веб-интерфейсом и интеграцией с Telegram-ботом.
|
||
|
||
## Архитектура
|
||
|
||
Проект состоит из двух частей:
|
||
- **Backend** (Node.js + Express) - API сервер и Telegram-бот
|
||
- **Frontend** (Next.js + React + TypeScript) - веб-интерфейс калькуляторов
|
||
|
||
## Быстрый старт
|
||
|
||
### Backend
|
||
|
||
1. Перейдите в папку `backend`:
|
||
```bash
|
||
cd backend
|
||
```
|
||
|
||
2. Установите зависимости:
|
||
```bash
|
||
npm install
|
||
```
|
||
|
||
3. Создайте файл `.env` на основе `.env.example`:
|
||
```bash
|
||
cp .env.example .env
|
||
```
|
||
|
||
4. Заполните переменные окружения в `.env`:
|
||
```env
|
||
BOT_TOKEN=your_telegram_bot_token
|
||
WEBAPP_BASE_URL=https://your-domain.com
|
||
API_BASE_URL=https://api.your-domain.com
|
||
HTTP_PORT=3001
|
||
CORS_ORIGINS=https://your-domain.com
|
||
```
|
||
|
||
5. Запустите сервер:
|
||
```bash
|
||
node bot.js
|
||
```
|
||
|
||
### Frontend
|
||
|
||
1. Перейдите в папку `frontend`:
|
||
```bash
|
||
cd frontend
|
||
```
|
||
|
||
2. Установите зависимости:
|
||
```bash
|
||
npm install
|
||
```
|
||
|
||
3. (Опционально) Создайте файл `.env.local` для переопределения API URL:
|
||
```env
|
||
NEXT_PUBLIC_API_BASE_URL=https://api.your-domain.com
|
||
```
|
||
|
||
4. Запустите dev-сервер:
|
||
```bash
|
||
npm run dev
|
||
```
|
||
|
||
5. Для production сборки:
|
||
```bash
|
||
npm run build
|
||
npm run export
|
||
```
|
||
|
||
## Добавление новых калькуляторов
|
||
|
||
См. подробное руководство в файле [CALCULATOR_GUIDE.md](./CALCULATOR_GUIDE.md)
|
||
|
||
## Структура проекта
|
||
|
||
```
|
||
DoSoapCalc/
|
||
├── backend/
|
||
│ ├── calculators/ # Модули калькуляторов
|
||
│ │ ├── index.js # Регистрация калькуляторов
|
||
│ │ ├── soap.js # Калькулятор мыла
|
||
│ │ └── candle.js # Пример: калькулятор свечей
|
||
│ ├── config/
|
||
│ │ └── env.js # Загрузка переменных окружения
|
||
│ ├── lib/
|
||
│ │ ├── telegram.js # Логика отправки в Telegram
|
||
│ │ └── validator.js # Валидация данных
|
||
│ ├── routes/
|
||
│ │ └── api.js # API маршруты
|
||
│ └── bot.js # Главный файл backend
|
||
│
|
||
└── frontend/
|
||
├── app/
|
||
│ ├── [calculator]/ # Динамический роут для калькуляторов
|
||
│ └── page.tsx # Редирект на /soap
|
||
├── components/
|
||
│ ├── DynamicCalculator.tsx # Универсальный компонент
|
||
│ └── FormField.tsx # Переиспользуемые поля
|
||
├── lib/
|
||
│ ├── calculators/ # Модули калькуляторов (frontend)
|
||
│ │ ├── index.ts
|
||
│ │ ├── soap.ts
|
||
│ │ └── candle.ts
|
||
│ ├── api.ts # Логика отправки данных
|
||
│ └── config.ts # Конфигурация
|
||
└── types/
|
||
└── calculator.ts # TypeScript типы
|
||
```
|
||
|
||
## Использование
|
||
|
||
1. Откройте Telegram-бота
|
||
2. Отправьте команду `/menu`
|
||
3. Нажмите на кнопку для открытия калькулятора
|
||
4. Заполните форму
|
||
5. Нажмите "Отправить расчёт в Telegram"
|
||
6. Результаты будут отправлены в чат с ботом
|
||
|
||
## Доступные калькуляторы
|
||
|
||
- **Мыло** (`/soap`) - расчёт себестоимости мыла ручной работы
|
||
- **Свеча** (`/candle`) - пример калькулятора свечей
|
||
|
||
## Технологии
|
||
|
||
**Backend:**
|
||
- Node.js
|
||
- Express
|
||
- node-telegram-bot-api
|
||
- multer (загрузка файлов)
|
||
|
||
**Frontend:**
|
||
- Next.js 15
|
||
- React 19
|
||
- TypeScript
|
||
- Tailwind CSS 4
|
||
|
||
## Лицензия
|
||
|
||
ISC
|
||
|