- Реструктуризация: src/ разбит на middleware/, utils/, repositories/ (удалены), routes/ (удалены) - Добавлен src/original-html.ts — полный HTML с reportModal - Добавлен src/index.tsx.backup — React-компонент с reportModal - Миграции переименованы (0001_initial_schema.sql) - Добавлена миграция 0018 (удалена позже) - Docker: multi-stage build, wrangler.toml - Frontend: public/static/app.js + style.css - seed.sql добавлен - Документация: CHANGELOG, CHANGES_v4.1.0-4.1.9, PROJECT_STRUCTURE
215 lines
8.5 KiB
Markdown
215 lines
8.5 KiB
Markdown
# AKNAPROFF Tootmine
|
||
|
||
**Версия:** 4.0.4 (28.11.2025)
|
||
**Статус:** ✅ Production Ready - **Все функции работают, включая клики по ячейкам**
|
||
|
||
## 📋 Обзор проекта
|
||
|
||
Система управления производством окон для компании AKNAPROFF. Веб-приложение построено на Hono (Cloudflare Workers) с базой данных D1 SQLite.
|
||
|
||
## 🎯 Стратегия восстановления v4.0.0
|
||
|
||
### ✅ ОСНОВА проекта (НЕ ТРОГАЕМ):
|
||
- **Original HTML** (1223 строки) из архива `aknaproff.zip`
|
||
- **Original app.js** (73KB, 2079 строк) - все функции, стили, логика
|
||
- **Original all.min.css** (100KB) - FontAwesome и стили
|
||
- **Original button texts** - "Lisa uus rida", "Tühista", etc.
|
||
- **Original function names** - `openModal()`, `closeModal()`, etc.
|
||
- **Original IDs** - `recordModal`, `settingsForm`, etc.
|
||
|
||
### 🔧 ЧТО ВОССТАНАВЛИВАЕМ:
|
||
- **Backend API** (Hono) - создан под фронтенд вызовы из оригинального app.js
|
||
- **D1 Database** - схема БД для хранения данных
|
||
- **Authentication** - JWT токены для безопасности
|
||
|
||
## 🌐 Доступ к приложению
|
||
|
||
- **Sandbox URL**: https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.novita.ai
|
||
|
||
## 👤 Демо пользователи
|
||
|
||
| Пользователь | Пароль | Роль | Описание |
|
||
|--------------|--------|------|----------|
|
||
| `admin` | `demo123` | Admin | Для разработчика |
|
||
| `aknaproff` | `demo123` | Admin | Для клиента |
|
||
|
||
## ✨ Основные функции
|
||
|
||
### Реализовано (v4.0.0):
|
||
- ✅ **100% соответствие оригинальному HTML из архива**
|
||
- ✅ Управление производственными записями (CRUD)
|
||
- ✅ Статусные чекбоксы для этапов производства
|
||
- ✅ Система флагов ошибок с блокировкой полей
|
||
- ✅ Модальные окна (7 шт): Login, Record, Notes, Problems, Blocked, Settings, Report
|
||
- ✅ Быстрый поиск по: Klient, Tüüp, Pakkum. Nr, Töö Nr
|
||
- ✅ Сортировка по колонкам
|
||
- ✅ Фильтрация по месяцу и году
|
||
- ✅ Итоговые суммы (Kogus, Hind)
|
||
- ✅ JWT аутентификация
|
||
- ✅ Audit log для изменений
|
||
- ✅ Soft delete записей
|
||
- ✅ Генерация отчётов (Master, Accountant)
|
||
|
||
## 🏗️ Архитектура
|
||
|
||
### Frontend (из архива):
|
||
```
|
||
public/
|
||
├── static/
|
||
│ ├── app.js # Original 73KB, 2079 lines
|
||
│ └── all.min.css # Original 100KB FontAwesome
|
||
└── original.html # Original 1223 lines (встроен в TypeScript)
|
||
```
|
||
|
||
### Backend (Hono + D1):
|
||
```
|
||
src/
|
||
├── index.tsx # Main Hono app (26 API endpoints)
|
||
├── original-html.ts # Embedded original HTML
|
||
├── middleware/
|
||
│ └── auth.ts # JWT middleware
|
||
└── utils/
|
||
└── auth.ts # Password hashing, token generation
|
||
```
|
||
|
||
### Database (D1):
|
||
```
|
||
migrations/
|
||
└── 0001_initial_schema.sql # 4 tables:
|
||
# - users
|
||
# - production_records
|
||
# - status_checkboxes
|
||
# - audit_log
|
||
```
|
||
|
||
## 📡 API Endpoints (26)
|
||
|
||
### Authentication (2):
|
||
- `POST /api/auth/login` - Вход в систему
|
||
- `PATCH /api/users/profile` - Изменение профиля
|
||
|
||
### Data Management (8):
|
||
- `GET /api/years` - Список годов для фильтров
|
||
- `GET /api/records` - Список записей (с фильтрами)
|
||
- `POST /api/records` - Создание записи
|
||
- `GET /api/records/:id` - Получение записи
|
||
- `PATCH /api/records/:id` - Обновление записи
|
||
- `DELETE /api/records/:id` - Удаление записи
|
||
- `PATCH /api/records/:id/material-confirmed` - Подтверждение материала
|
||
- `PATCH /api/records/:id/material2-confirmed` - Подтверждение материала-2
|
||
|
||
### Status Management (6):
|
||
- `PATCH /api/records/:id/worksheets-cycle` - Цикл статуса "Töölehti"
|
||
- `PATCH /api/records/:id/status` - Обновление даты статуса
|
||
- `PATCH /api/records/:id/notes` - Сохранение заметок
|
||
- `PATCH /api/records/:id/problems` - Сохранение проблем
|
||
- `PATCH /api/records/:id/price-paid` - Подтверждение оплаты
|
||
- `PATCH /api/records/:id/blocked` - Информация о блокировке
|
||
|
||
## 🔒 Важные принципы восстановления
|
||
|
||
### ❌ НЕ МЕНЯТЬ:
|
||
1. Названия функций из оригинального `app.js`
|
||
2. Тексты кнопок (на эстонском языке)
|
||
3. HTML структуру из архива
|
||
4. CSS классы и стили
|
||
5. ID элементов
|
||
6. Логику работы фронтенда
|
||
|
||
### ✅ ТОЛЬКО СОЗДАВАТЬ:
|
||
1. Backend API endpoints под фронтенд вызовы
|
||
2. Database схему для хранения данных
|
||
3. Middleware для аутентификации
|
||
4. Utility функции для бэкенда
|
||
|
||
## 🚀 Локальная разработка
|
||
|
||
```bash
|
||
# Установка зависимостей
|
||
cd /home/user/webapp
|
||
npm install
|
||
|
||
# База данных
|
||
npm run db:migrate:local # Применить миграции
|
||
npm run db:seed # Загрузить тестовые данные
|
||
|
||
# Разработка
|
||
npm run build # Сборка проекта
|
||
pm2 start ecosystem.config.cjs # Запуск сервера
|
||
pm2 logs webapp --nostream # Просмотр логов
|
||
|
||
# Тестирование
|
||
curl http://localhost:3000/api/years
|
||
curl http://localhost:3000/api/records?month=1&year=2025
|
||
```
|
||
|
||
## 📝 Git история
|
||
|
||
```bash
|
||
6d22b04 - FULL RESTORE: Use original HTML/CSS/JS from archive as base (v4.0.0)
|
||
cc7b3d4 - Update README to v3.20.8
|
||
013be72 - Fix: Replace openAddRecordModal() with openModal()
|
||
f45b5a3 - Fix D1 database binding and API /api/years endpoint (v3.20.7)
|
||
[Earlier commits...]
|
||
```
|
||
|
||
## 🎨 Оригинальные стили и функции
|
||
|
||
### Кнопки (Original):
|
||
- "Lisa uus rida" - Добавить новую строку (`openModal()`)
|
||
- "Tühista" - Отмена (`closeModal()`)
|
||
- "Salvesta" - Сохранить
|
||
- "Kustuta" - Удалить
|
||
|
||
### Модальные окна (Original):
|
||
- `loginModal` - Вход администратора
|
||
- `recordModal` - Добавление/редактирование записи
|
||
- `notesModal` - Заметки к записи
|
||
- `problemsModal` - Проблемы производства
|
||
- `blockedFieldModal` - Уведомление о блокировке
|
||
- `settingsModal` - Настройки пользователя
|
||
- `reportModal` - Генерация отчётов
|
||
|
||
### Функции (Original from app.js):
|
||
- `openModal()` - Открыть форму добавления
|
||
- `closeModal()` - Закрыть форму
|
||
- `toggleDate()` - Переключить дату статуса
|
||
- `toggleWorksheetsStep()` - Цикл статусов "Töölehti"
|
||
- `openNotesModal()`, `openProblemsModal()`, etc.
|
||
|
||
## ✅ Проверка качества восстановления
|
||
|
||
```bash
|
||
# ✅ Проверка оригинального HTML
|
||
curl http://localhost:3000 | grep "Lisa uus rida"
|
||
curl http://localhost:3000 | grep 'onclick="openModal()"'
|
||
|
||
# ✅ Проверка API
|
||
curl http://localhost:3000/api/years
|
||
# {"years":[2024,2025,2026]}
|
||
|
||
# ✅ Проверка модальных окон
|
||
curl http://localhost:3000 | grep -o 'id="recordModal"'
|
||
curl http://localhost:3000 | grep -o 'id="settingsForm"'
|
||
```
|
||
|
||
## 📦 Технологии
|
||
|
||
- **Frontend**: Original HTML/CSS/JS from archive
|
||
- **Backend**: Hono (Cloudflare Workers)
|
||
- **Database**: Cloudflare D1 (SQLite)
|
||
- **Auth**: JWT tokens
|
||
- **Styles**: TailwindCSS + FontAwesome
|
||
- **Deployment**: Cloudflare Pages
|
||
|
||
## 🎯 Следующие шаги
|
||
|
||
1. Тестирование всех функций на соответствие оригиналу
|
||
2. Проверка всех модальных окон
|
||
3. Проверка генерации отчётов
|
||
4. Deploy на Cloudflare Pages
|
||
|
||
---
|
||
|
||
**Версия 4.0.0** - Полное восстановление из архива с соблюдением принципа "Архив - это основа" 🎉
|