Files
Aknaproff/CHANGELOG.md
Deploy Bot 64403d6fd6 v4.1.21: Реструктуризация проекта для Synology ARM
- Реструктуризация: 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
2026-01-14 18:37:00 +02:00

233 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)