- Реструктуризация: 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
200 lines
6.7 KiB
Markdown
200 lines
6.7 KiB
Markdown
# AKNAPROFF Tootmine - Изменения v4.1.0
|
||
|
||
**Дата:** 28.11.2025
|
||
**Версия:** v4.1.0
|
||
|
||
---
|
||
|
||
## 🎯 Реализованные изменения
|
||
|
||
### 1. ✅ Логика блокировки изменена
|
||
**Было:** Проблемы блокировали поля при наличии текста ИЛИ галочек ошибок
|
||
**Стало:** Блокировка только по галочкам ошибок, текст - только пояснение
|
||
|
||
**Технические детали:**
|
||
- Убрана проверка `(record.problems && record.problems.trim())` из условия hasProblems
|
||
- Блокировка происходит только при установленных флагах ошибок
|
||
|
||
### 2. ✅ Система авторизации и ролей
|
||
**Реализовано 3 уровня доступа:**
|
||
|
||
| Роль | Доступ | Описание |
|
||
|------|--------|----------|
|
||
| **guest** | Только просмотр | Гость без входа - ничего не может изменять |
|
||
| **user** | Просмотр + Проблемы | Простой пользователь - может изменять только Problems |
|
||
| **admin** | Полный доступ | Администратор - может изменять всё |
|
||
|
||
**Функциональность:**
|
||
- При открытии без логина показывается форма входа
|
||
- Guest (гость) - только read-only просмотр
|
||
- User - может редактировать проблемы (текст + галочки ошибок)
|
||
- Admin - полный доступ ко всем функциям
|
||
|
||
**Защищённые функции:**
|
||
- toggleDate() - только admin
|
||
- toggleMaterialConfirmed() - только admin
|
||
- toggleMaterial2Confirmed() - только admin
|
||
- toggleWorksheetsStep() - только admin
|
||
- togglePricePaid() - только admin
|
||
- saveNotes() - только admin
|
||
- saveProblems() - user и admin
|
||
|
||
### 3. ✅ Кнопка сортировки по ID
|
||
**Добавлена кнопка "ID" перед фильтрами:**
|
||
- Клик 1: Сортировка по возрастанию (↑)
|
||
- Клик 2: Сортировка по убыванию (↓)
|
||
- Клик 3: Отключение сортировки
|
||
- Иконка показывает текущее состояние
|
||
|
||
---
|
||
|
||
## 📂 Измененные файлы
|
||
|
||
### Для копирования на сервер:
|
||
|
||
```bash
|
||
# Frontend файлы (обязательно)
|
||
public/static/app.js
|
||
public/original.html
|
||
|
||
# Backend файлы (обязательно)
|
||
src/index.tsx # Если были изменения в API
|
||
src/original-html.ts # Embedded HTML
|
||
|
||
# Build файлы (создаются автоматически)
|
||
dist/_worker.js # Скомпилированный backend
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 Инструкция по обновлению на сервере
|
||
|
||
### Вариант 1: Полное обновление (РЕКОМЕНДУЕТСЯ)
|
||
|
||
```bash
|
||
# 1. Остановить контейнер
|
||
docker-compose down
|
||
|
||
# 2. Скопировать файлы из локальной машины на сервер
|
||
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/
|
||
|
||
# 3. Пересобрать на сервере
|
||
cd /path/to/webapp
|
||
npm run build
|
||
|
||
# 4. Запустить контейнер
|
||
docker-compose up -d --build
|
||
```
|
||
|
||
### Вариант 2: Только frontend (БЕЗ ПЕРЕСБОРКИ)
|
||
|
||
Если НЕ ИЗМЕНЯЛСЯ backend (src/index.tsx), можно обновить только frontend:
|
||
|
||
```bash
|
||
# 1. Скопировать файлы
|
||
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/
|
||
|
||
# 2. Пересобрать
|
||
docker-compose exec aknaproff-backend npm run build
|
||
|
||
# 3. Перезапустить (НЕ пересобирать образ)
|
||
docker-compose restart
|
||
```
|
||
|
||
### Вариант 3: Копирование готового dist/
|
||
|
||
```bash
|
||
# 1. Собрать локально (уже сделано)
|
||
npm run build
|
||
|
||
# 2. Скопировать dist на сервер
|
||
scp dist/_worker.js user@server:/path/to/webapp/dist/
|
||
|
||
# 3. Перезапустить
|
||
docker-compose restart
|
||
```
|
||
|
||
---
|
||
|
||
## ⚠️ ВАЖНО: База данных
|
||
|
||
**БД НЕ ИЗМЕНЯЛАСЬ!** Миграции не требуются.
|
||
|
||
Все изменения только в логике приложения:
|
||
- Логика hasProblems (frontend)
|
||
- Система прав (frontend)
|
||
- Кнопка сортировки (frontend)
|
||
|
||
**Данные в БД сохранятся полностью.**
|
||
|
||
---
|
||
|
||
## ✅ Проверка после обновления
|
||
|
||
### 1. Проверить вход
|
||
```bash
|
||
# Открыть в браузере
|
||
http://your-server:8180
|
||
|
||
# Должна показаться форма входа
|
||
```
|
||
|
||
### 2. Тестировать роли
|
||
|
||
**Guest (без входа):**
|
||
- ❌ Не может ничего изменять
|
||
- ✅ Может только просматривать
|
||
|
||
**User (простой пользователь):**
|
||
- ✅ Может изменять Problems (текст + галочки)
|
||
- ❌ Не может изменять даты, notes, статусы
|
||
|
||
**Admin:**
|
||
- ✅ Может изменять всё
|
||
|
||
### 3. Проверить сортировку
|
||
- Нажать кнопку "ID" перед фильтрами
|
||
- Проверить сортировку: ↑ → ↓ → отключено
|
||
|
||
### 4. Проверить логику блокировки
|
||
- Поставить галочку ошибки без текста
|
||
- Поле VALMIS/VÄLJAS должно заблокироваться (красное)
|
||
- Убрать галочку, добавить только текст
|
||
- Поле VALMIS/VÄLJAS НЕ должно блокироваться
|
||
|
||
---
|
||
|
||
## 📊 Сводка изменений
|
||
|
||
| Компонент | Изменено | Тип |
|
||
|-----------|----------|-----|
|
||
| Логика hasProblems | ✅ | Frontend |
|
||
| Система авторизации | ✅ | Frontend |
|
||
| Проверки прав | ✅ | Frontend |
|
||
| Кнопка сортировки | ✅ | Frontend |
|
||
| База данных | ❌ | Не изменялась |
|
||
| Backend API | ❌ | Не изменялся |
|
||
|
||
---
|
||
|
||
## 🔧 Откат изменений (если что-то пошло не так)
|
||
|
||
```bash
|
||
# 1. Вернуться к предыдущей версии
|
||
git checkout v4.0.13
|
||
|
||
# 2. Пересобрать
|
||
npm run build
|
||
|
||
# 3. Перезапустить
|
||
docker-compose up -d --build
|
||
```
|
||
|
||
---
|
||
|
||
**Готово к deployment!** 🚀
|