# AKNAPROFF Tootmine - CHANGELOG ## v4.1.10 - 2025-12-31 (HOTFIX - КРИТИЧЕСКИЕ ИСПРАВЛЕНИЯ) ### 🔥 Критические исправления #### 1. Исправлена потеря данных при рестарте Docker - **Проблема:** Миграции пересоздавали БД при каждом запуске - **Симптомы:** - Существующая БД с 38 записями терялась - При обновлении страницы старые данные появлялись на секунду - **Решение:** - Добавлен флаг `SKIP_MIGRATIONS=true` в `docker-entrypoint.sh` - Добавлена переменная `SKIP_MIGRATIONS: "true"` в `docker-compose.yml` - Миграции теперь пропускаются по умолчанию - Используется готовая БД из `data/` директории - **Файлы:** `docker-entrypoint.sh`, `docker-compose.yml` #### 2. Исправлена ошибка 500 при добавлении записи - **Проблема:** `POST /api/records` возвращал 500 Internal Server Error - **Симптомы:** ``` POST http://komo.aknaproff.ee:8180/api/records [HTTP/1.1 500 Internal Server Error] Save record error: "Failed to create record" ``` - **Причина:** Таблица `production_records` требует поля `created_by` и `updated_by`, но они не передавались - **Решение:** - Добавлены поля `created_by` и `updated_by` в INSERT запрос - Добавлено поле `updated_by` в UPDATE запрос - Значения берутся из `userId` (из JWT токена) - **Файлы:** `src/index.tsx`, `dist/_worker.js` #### 3. Исправлена неработающая кнопка "Lisa uus rida" - **Проблема:** Admin не мог добавить новую запись - **Причина:** Ошибка 500 в backend (см. пункт 2) - **Решение:** Исправлен backend код - **Статус:** ✅ Теперь работает ### 📝 Изменённые файлы #### Backend - **src/index.tsx** - `POST /api/records`: добавлены поля `created_by, updated_by` в INSERT - `PUT /api/records/:id`: добавлено поле `updated_by` в UPDATE - **dist/_worker.js** - Пересобран с исправлениями #### Docker - **docker-entrypoint.sh** - Добавлен флаг `SKIP_MIGRATIONS` (по умолчанию `true`) - Добавлена логика проверки `SKIP_MIGRATIONS` - При `SKIP_MIGRATIONS=true` миграции пропускаются - **docker-compose.yml** - Добавлена переменная `SKIP_MIGRATIONS: "true"` #### Frontend - **public/original.html** - Cache version обновлена: `app.js?v=4.1.10` ### ⚠️ Breaking Changes Нет breaking changes. Полная обратная совместимость с v4.1.9. ### 🔄 Миграция с v4.1.9 1. Остановить контейнер: `docker-compose down` 2. **КРИТИЧНО:** Сделать бэкап: `cp -r data data.backup.$(date +%Y%m%d_%H%M%S)` 3. Заменить файлы (НЕ трогать `data/`) 4. Проверить `SKIP_MIGRATIONS: "true"` в `docker-compose.yml` 5. Запустить: `docker-compose up -d --build` 6. Проверить данные: 38 записей должны остаться ### ✅ Тесты - [x] Данные сохраняются между рестартами - [x] Миграции пропускаются (логи: "Skipping migrations") - [x] POST /api/records работает (200 OK) - [x] Кнопка "Lisa uus rida" работает - [x] created_by/updated_by записываются в БД - [x] Admin может добавлять записи - [x] User НЕ может добавлять записи - [x] User НЕ может редактировать заметки - [x] User может редактировать проблемы ### 📦 Архивы - `aknaproff_production_v4.1.10_arm.tar.gz` (278 KB) - `aknaproff_production_v4.1.10_arm.zip` (318 KB) --- ## v4.1.9 - 2025-12-30 ### 🔒 Исправлены права доступа #### 1. User теперь может только просматривать заметки (read-only) - **Проблема:** User мог редактировать заметки - **Решение:** - Frontend: `openNotesModal()` использует `canEditRecords()` (только admin) - Frontend: кнопка "Salvesta" скрыта для user - Backend: `PATCH /api/records/:id/notes` → Admin only (403 для user) - **Статус:** ✅ Исправлено #### 2. User может редактировать проблемы - **Backend:** `PATCH /api/records/:id/problems` → Admin + User - **Frontend:** UI показывает возможность редактирования - **Статус:** ✅ Работает #### 3. Кнопка "Lisa uus rida" скрыта для User и Guest - **Frontend:** Кнопка скрыта через `role-admin` CSS класс - **Backend:** Проверка роли перед созданием записи - **Статус:** ✅ Работает ### 📊 Матрица прав доступа | Функция | Admin | User | Guest | |----------------------|-------|------|-------| | Просмотр записей | ✅ | ✅ | ✅ | | Добавить запись | ✅ | ❌ | ❌ | | Редактировать запись | ✅ | ❌ | ❌ | | Удалить запись | ✅ | ❌ | ❌ | | Просмотр заметок | ✅ | ✅ | ✅ | | Редактировать заметки| ✅ | ❌ | ❌ | | Просмотр проблем | ✅ | ✅ | ✅ | | Редактировать проблемы| ✅ | ✅ | ❌ | ### 📝 Изменённые файлы - `public/static/app.js`: изменены `openNotesModal()`, `saveNotes()` - `src/index.tsx`: добавлены проверки роли в API - `public/original.html`: cache v4.1.9 --- ## v4.1.8 - 2025-12-30 ### 🐛 Исправления #### 1. Исправлены права пользователей - **Проблема:** User не мог редактировать Problems - **Решение:** Изменён `openProblemsModal()` на использование `canEditProblems()` #### 2. Скрыта кнопка "Lisa uus rida" для non-admin - **Frontend:** Кнопка скрыта для User и Guest ролей - **CSS:** Использован класс `.role-admin` #### 3. Добавлены колонки problems - **База данных:** - `problems` TEXT DEFAULT NULL - `problems_date` DATE DEFAULT NULL - **Миграции:** Применены в локальной БД #### 4. Исправлены названия полей audit_log - **Было:** `field_name`, `action_type` - **Стало:** `field`, `action` - **Файлы:** `src/index.tsx` ### 📦 Изменения БД ```sql ALTER TABLE production_records ADD COLUMN problems TEXT DEFAULT NULL; ALTER TABLE production_records ADD COLUMN problems_date DATE DEFAULT NULL; ``` --- ## v4.1.7 - 2025-12-30 ### 🔐 Исправлена аутентификация #### 1. Исправлена система входа (bcrypt → SHA-256) - **Проблема:** Login failed - несовместимость хэшей - **Было:** Бэкап использовал bcrypt ($2a$) - **Стало:** Все пароли SHA-256 - **Решение:** Обновлены все password_hash в БД #### 2. Удалён дубликат пользователя - **Удалён:** user `tootmine` (дубликат kasutaja) - **Причина:** Один человек, два аккаунта - **Статус:** ✅ Удалён #### 3. Добавлена колонка deleted_at - **Таблица:** `users` - **Тип:** `DATETIME DEFAULT NULL` - **Причина:** Код использовал `WHERE deleted_at IS NULL`, но колонки не было - **Статус:** ✅ Добавлена ### 📊 База данных - **Записей:** 38 production records - **Пользователей:** 3 active - `admin` / `demo123` (admin) - `aknaproff` / `demo123` (admin) - `kasutaja` / `tootmine` (user) ### 🔒 Учётные данные Все пароли теперь SHA-256: ``` admin: d3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791 aknaproff: d3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791 kasutaja: a1026b7bd143f7190248bc79901e9a357a408e208f2d8e4d38fccf184754f35f ``` --- ## v4.1.6 и ранее См. файлы: - `CHANGES_v4.1.6.md` - `CHANGES_v4.1.5.md` - `CHANGES_v4.1.4.md` - `CHANGES_v4.1.3.md` - `CHANGES_v4.1.2.md` - `CHANGES_v4.1.0.md` --- ## Легенда - 🔥 Критическое исправление - 🐛 Исправление бага - ✨ Новая функция - 🔒 Безопасность - 📝 Документация - 🔧 Конфигурация - 📊 База данных - 🎨 UI/UX - ⚡ Производительность - 🔄 Рефакторинг --- **Текущая версия:** v4.1.10 **Дата:** 2025-12-31 **Статус:** Production Ready ✅ **Архитектура:** ARM64/AMD64 (Synology Compatible)