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
This commit is contained in:
Deploy Bot
2026-01-14 18:37:00 +02:00
parent 4898f5ec7f
commit 64403d6fd6
113 changed files with 19231 additions and 3084 deletions

231
CHANGES_v4.1.8.md Normal file
View File

@@ -0,0 +1,231 @@
# AKNAPROFF v4.1.8 - Permissions Fix & UI Improvements
**Дата:** 2025-12-30
**Версия:** v4.1.8
**Тип:** Bug Fix + UI Improvement
---
## Изменения
### 1. ✅ Исправлены права доступа для Märkused (Notes)
**Проблема:** Пользователь `kasutaja` (role: user) не мог редактировать заметки
**Причина:** Код использовал `canEditRecords()` (только admin) вместо `canEditProblems()` (user и admin)
**Исправлено:**
- `openNotesModal()`: изменена проверка с `canEditRecords()` на `canEditProblems()`
- `saveNotes()`: изменена проверка с `canEditRecords()` на `canEditProblems()`
**Результат:**
- ✅ Admin может редактировать заметки
- ✅ User (kasutaja) может редактировать заметки
- ❌ Guest не может редактировать заметки (только просмотр)
---
### 2. ✅ Исправлены права доступа для Probleemid (Problems)
**Проблема:** Пользователь `kasutaja` (role: user) не мог редактировать проблемы
**Причина:**
1. Отсутствовали колонки `problems` и `problems_date` в таблице `production_records`
2. Неправильные названия колонок в `audit_log` (использовались `field_name` и `action_type` вместо `field` и `action`)
**Исправлено:**
- Добавлены колонки `problems` и `problems_date` в таблицу `production_records`
- Исправлены названия колонок в SQL запросах к `audit_log`:
- `field_name``field`
- `action_type``action`
**Результат:**
- ✅ Admin может редактировать проблемы и галочки ошибок
- ✅ User (kasutaja) может редактировать проблемы и галочки ошибок
- ❌ Guest не может редактировать проблемы (только просмотр)
---
### 3. ✅ Скрыта кнопка "Lisa uus rida" для не-админов
**Проблема:** Кнопка "Lisa uus rida" (Добавить новую строку) была видна всем пользователям
**Требование:** Только админы должны видеть кнопку добавления новой записи
**Исправлено:**
- Добавлен `id="addNewRowBtn"` к div с кнопкой в `original.html`
- Добавлена логика скрытия в `showMainApp()`:
- **Admin:** кнопка видна
- **User:** кнопка скрыта
- **Guest:** кнопка скрыта
**Результат:**
- ✅ Admin видит кнопку "Lisa uus rida"
- ❌ User (kasutaja) НЕ видит кнопку
- ❌ Guest НЕ видит кнопку
---
## Изменённые Файлы
### Frontend
- `public/static/app.js`:
- Исправлены права доступа для `openNotesModal()` и `saveNotes()`
- Добавлена логика скрытия кнопки "Lisa uus rida" в `showMainApp()`
- `public/original.html`:
- Добавлен `id="addNewRowBtn"` к div с кнопкой
- `src/original-html.ts`:
- Регенерирован с версией v4.1.8
### Backend
- `src/index.tsx`:
- Исправлены названия колонок в SQL запросах к `audit_log` (4 места)
- `field_name``field`
- `action_type``action`
### База данных
- `production_records`:
- Добавлена колонка `problems TEXT DEFAULT NULL`
- Добавлена колонка `problems_date DATE DEFAULT NULL`
---
## Тестирование
### Backend API Tests
#### ✅ User (kasutaja) может редактировать Notes
```bash
TOKEN=$(curl -s -X POST http://localhost:3000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"kasutaja","password":"tootmine"}' | jq -r .token)
curl -X PATCH http://localhost:3000/api/records/2/notes \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{"notes":"Test note from user"}'
# → {"success": true} ✅
```
#### ✅ User (kasutaja) может редактировать Problems
```bash
curl -X PATCH http://localhost:3000/api/records/2/problems \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{"problems":"Test problem","errorFlags":{"worksheets_error":1}}'
# → {"success": true} ✅
```
### Frontend Tests
- ✅ Admin видит кнопку "Lisa uus rida"
- ✅ User (kasutaja) НЕ видит кнопку "Lisa uus rida"
- ✅ Guest НЕ видит кнопку "Lisa uus rida"
- ✅ User может открыть модальное окно заметок и сохранить
- ✅ User может открыть модальное окно проблем и сохранить
- ✅ Guest может открыть модальные окна (read-only)
---
## Deployment на Production
### ⚠️ КРИТИЧНО: База данных изменена
**Шаг 1: Обновить БД (ОБЯЗАТЕЛЬНО)**
```bash
# 1. Добавить колонки problems в production_records
docker-compose exec aknaproff-backend sh -c \
"npx wrangler d1 execute webapp-production --local --command='
ALTER TABLE production_records ADD COLUMN problems TEXT DEFAULT NULL;
ALTER TABLE production_records ADD COLUMN problems_date DATE DEFAULT NULL;
'"
# 2. Проверка
docker-compose exec aknaproff-backend sh -c \
"npx wrangler d1 execute webapp-production --local --command='
PRAGMA table_info(production_records);
'" | grep problems
# Должно показать: problems | TEXT | NULL
# problems_date | DATE | NULL
```
**Шаг 2: Обновить код**
Быстрый вариант (рекомендуется):
```bash
scp dist/_worker.js user@server:/path/to/webapp/dist/
docker-compose restart
```
Полный вариант:
```bash
scp public/static/app.js user@server:/path/to/webapp/public/static/
scp public/original.html user@server:/path/to/webapp/public/
scp src/original-html.ts user@server:/path/to/webapp/src/
scp src/index.tsx user@server:/path/to/webapp/src/
cd /path/to/webapp && npm run build && docker-compose restart
```
**Шаг 3: Проверка**
```bash
# Тест пользователя kasutaja
curl -X POST http://localhost:8180/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"kasutaja","password":"tootmine"}'
# Проверить кнопку "Lisa uus rida":
# - Admin: видна
# - User: скрыта
# - Guest: скрыта
```
---
## Матрица Прав Доступа
| Действие | Admin | User (kasutaja) | Guest |
|----------|-------|-----------------|-------|
| **Просмотр данных** | ✅ | ✅ | ✅ |
| **Редактировать Märkused** | ✅ | ✅ | ❌ |
| **Редактировать Probleemid** | ✅ | ✅ | ❌ |
| **Редактировать даты** | ✅ | ❌ | ❌ |
| **Добавить новую запись** | ✅ | ❌ | ❌ |
| **Удалить запись** | ✅ | ❌ | ❌ |
| **Редактировать все поля** | ✅ | ❌ | ❌ |
| **Изменить настройки** | ✅ | ❌ | ❌ |
---
## Статус
- **Версия:** v4.1.8
- **Статус:** ✅ Production Ready
- **Production URL:** https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.novita.ai
- **HTTP:** 200 OK
- **JavaScript Errors:** 0
- **База данных:** ✅ Обновлена
---
## Changelog
### v4.1.8 (2025-12-30)
- 🔧 **FIX:** User (kasutaja) может редактировать заметки
- 🔧 **FIX:** User (kasutaja) может редактировать проблемы
- 🔧 **FIX:** Исправлены колонки audit_log (field_name → field, action_type → action)
- 📦 **ADD:** Колонки `problems` и `problems_date` в таблицу `production_records`
- 🎨 **UI:** Скрыта кнопка "Lisa uus rida" для user и guest
-**VERIFY:** Все права доступа работают корректно
---
## Известные Ограничения
1. **ERR_BLOCKED_BY_CLIENT** - AdBlock блокирует ресурс (не критично)
2. **Tailwind CSS CDN** - в production рекомендуется PostCSS
3. **SHA-256 пароли** - в production рекомендуется bcrypt
---
## Итог
**Проблемы решены:**
1. User (kasutaja) может редактировать заметки и проблемы
2. Кнопка "Lisa uus rida" видна только админам
3. Все права доступа работают корректно
🎯 **Готово к deployment на production**
Не забудьте выполнить SQL команды для добавления колонок `problems` и `problems_date`!