- Реструктуризация: 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
194 lines
7.2 KiB
Markdown
194 lines
7.2 KiB
Markdown
# 💾 DB RESTORE REPORT - Production Data Merge
|
||
|
||
**Дата**: 2025-12-30
|
||
**Файл бекапа**: backup_30.12.25.zip
|
||
**Версия**: v4.1.6
|
||
**Статус**: ✅ Успешно выполнено
|
||
|
||
---
|
||
|
||
## 📋 Что было сделано
|
||
|
||
### 1. Анализ бекапа
|
||
**Источник**: `/home/user/uploaded_files/backend/data/v3/d1/miniflare-D1DatabaseObject/`
|
||
- Размер БД: 148 KB
|
||
- Количество записей: 38 (production данные)
|
||
- Пользователи в бекапе:
|
||
- admin (Administraator) - admin
|
||
- aknaproff (Aknaproff) - admin
|
||
- tootmine (Tootmine kasutaja) - user
|
||
|
||
### 2. Сохранение текущей БД
|
||
- Создан бекап текущей БД: `/tmp/webapp_old.sqlite` (72 KB)
|
||
- Количество записей: 7 (демо данные)
|
||
- Пользователи до восстановления:
|
||
- admin (Admin Test) - admin
|
||
- aknaproff (AKNAPROFF) - admin
|
||
- kasutaja (Kasutaja) - user
|
||
|
||
### 3. Восстановление production данных
|
||
**Действия**:
|
||
1. Остановлен PM2
|
||
2. Очищена директория `.wrangler/state/v3/d1/miniflare-D1DatabaseObject/`
|
||
3. Скопирована БД из бекапа
|
||
4. Применена миграция: добавлена колонка `deleted_at` (soft delete support)
|
||
|
||
### 4. Слияние пользователей
|
||
**Добавлен пользователь из v4.1.3**:
|
||
- **kasutaja** (Kasutaja) - user role
|
||
- Password hash: `a1026b7bd143f7190248bc79901e9a357a408e208f2d8e4d38fccf184754f35f` (password: tootmine)
|
||
|
||
**Итоговые пользователи** (4 в БД):
|
||
1. admin (Administraator) - admin
|
||
2. aknaproff (Aknaproff) - admin
|
||
3. tootmine (Tootmine kasutaja) - user
|
||
4. kasutaja (Kasutaja) - user
|
||
|
||
---
|
||
|
||
## 📊 Итоговое состояние БД
|
||
|
||
### Production Records
|
||
- **Количество записей**: 38
|
||
- **Данные**: Реальные production данные с production сервера
|
||
- **Месяцы**: Январь 2025, другие месяцы
|
||
- **Годы**: 2025, 2026
|
||
|
||
### Пользователи (4)
|
||
| ID | Username | Full Name | Role | Password |
|
||
|----|----------|-----------|------|----------|
|
||
| 1 | admin | Administraator | admin | demo123 |
|
||
| 2 | aknaproff | Aknaproff | admin | demo123 |
|
||
| 3 | tootmine | Tootmine kasutaja | user | tootmine |
|
||
| 4 | kasutaja | Kasutaja | user | tootmine |
|
||
|
||
**Примечание**: Оба пользователя "tootmine" и "kasutaja" имеют одинаковый пароль "tootmine" и роль "user".
|
||
|
||
---
|
||
|
||
## ✅ Проверка после восстановления
|
||
|
||
### API Endpoints
|
||
- ✅ GET /api/years → `[2025, 2026]`
|
||
- ✅ GET /api/records?month=1&year=2025 → 5 записей
|
||
- ✅ HTTP Status: 200 OK
|
||
|
||
### Браузер
|
||
- ✅ Страница загружается
|
||
- ✅ Форма логина работает
|
||
- ✅ Таблица показывает данные
|
||
- ✅ Консоль: 0 критических ошибок
|
||
- ✅ Все функции работают (проверено визуально)
|
||
|
||
### Вход в систему
|
||
Проверены все 4 пользователя:
|
||
- ✅ admin / demo123 → admin права
|
||
- ✅ aknaproff / demo123 → admin права
|
||
- ✅ tootmine / tootmine → user права
|
||
- ✅ kasutaja / tootmine → user права
|
||
- ✅ Guest (без входа) → read-only
|
||
|
||
---
|
||
|
||
## 🔧 Технические детали
|
||
|
||
### Миграция БД
|
||
Добавлена отсутствующая колонка:
|
||
```sql
|
||
ALTER TABLE production_records ADD COLUMN deleted_at DATETIME DEFAULT NULL;
|
||
```
|
||
|
||
**Проблема**: Бекап БД был сделан до применения миграции soft delete (v4.0.6).
|
||
**Решение**: Добавлена колонка `deleted_at` для поддержки soft delete.
|
||
|
||
### Структура БД
|
||
- **production_records**: 38 записей (+ deleted_at column)
|
||
- **status_checkboxes**: связанные данные
|
||
- **users**: 4 пользователя
|
||
- **audit_log**: история изменений
|
||
|
||
---
|
||
|
||
## 📝 Изменения в коде
|
||
|
||
**Код не изменялся!**
|
||
Все изменения только в БД:
|
||
- Восстановлены production данные
|
||
- Добавлен пользователь kasutaja
|
||
- Добавлена колонка deleted_at
|
||
|
||
**Текущая версия**: v4.1.6
|
||
- Все визуальные индикаторы работают (Probleemid, Märkused)
|
||
- Все правки v4.1.0 - v4.1.6 применены
|
||
- Код полностью совместим с production данными
|
||
|
||
---
|
||
|
||
## 🔐 Учётные данные
|
||
|
||
### Администраторы (полный доступ)
|
||
- Username: `admin` | Password: `demo123`
|
||
- Username: `aknaproff` | Password: `demo123`
|
||
|
||
### Обычные пользователи (просмотр + проблемы)
|
||
- Username: `tootmine` | Password: `tootmine`
|
||
- Username: `kasutaja` | Password: `tootmine`
|
||
|
||
### Гость (только просмотр)
|
||
- Кнопка: "Vaata ainult" (без входа)
|
||
|
||
---
|
||
|
||
## 🚀 Deployment на production
|
||
|
||
### Для применения на production сервере:
|
||
|
||
```bash
|
||
# 1. Создать бекап текущей production БД (КРИТИЧНО!)
|
||
docker-compose exec aknaproff-backend sh -c "
|
||
cp /data/v3/d1/miniflare-D1DatabaseObject/*.sqlite /data/backup_before_merge.sqlite
|
||
"
|
||
|
||
# 2. Скопировать восстановленную БД из sandbox
|
||
scp /home/user/webapp/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/2b35d4d42e3c9f6b5ad5b5579a7b1470c66e69f6b33a31e3f5a0095cc6d18656.sqlite \
|
||
user@server:/tmp/webapp_merged.sqlite
|
||
|
||
# 3. На сервере остановить docker
|
||
docker-compose down
|
||
|
||
# 4. Заменить БД файл
|
||
mv /path/to/data/v3/d1/miniflare-D1DatabaseObject/*.sqlite \
|
||
/path/to/data/v3/d1/miniflare-D1DatabaseObject/webapp.sqlite.bak
|
||
cp /tmp/webapp_merged.sqlite \
|
||
/path/to/data/v3/d1/miniflare-D1DatabaseObject/d6ce1225f7b3fe02cb9b5e87aebb58192679c5a5fb4dd87257777cedd013c0cc.sqlite
|
||
|
||
# 5. Запустить docker
|
||
docker-compose up -d
|
||
|
||
# 6. Проверить
|
||
curl http://localhost:8180/api/years
|
||
curl "http://localhost:8180/api/records?month=1&year=2025"
|
||
```
|
||
|
||
---
|
||
|
||
## 💡 Важные примечания
|
||
|
||
1. **Данные**: Теперь в БД 38 реальных production записей вместо 7 демо записей
|
||
2. **Пользователи**: Добавлен kasutaja (4-й пользователь), остальные из production бекапа
|
||
3. **Совместимость**: Код v4.1.6 полностью совместим с production данными
|
||
4. **Миграция**: Добавлена колонка deleted_at для поддержки soft delete
|
||
5. **Бекап**: Старая БД сохранена в `/tmp/webapp_old.sqlite`
|
||
|
||
---
|
||
|
||
## 🔗 URLs
|
||
|
||
- **Sandbox URL**: https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.novita.ai
|
||
- **Бекап файл**: /home/user/uploaded_files/backend/
|
||
- **Старая БД**: /tmp/webapp_old.sqlite
|
||
|
||
---
|
||
|
||
**🎯 Итог**: Production данные успешно восстановлены, пользователь kasutaja добавлен, миграция применена, всё работает! ✅
|