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

228
DB_FIX_v4.1.7.md Normal file
View File

@@ -0,0 +1,228 @@
# DB FIX v4.1.7 - Fix Login and Remove tootmine User
**Дата:** 2025-12-30
**Версия:** v4.1.7
**Тип:** Database Fix + Security Update
---
## Проблема
1. **Login failed** - все попытки логина возвращали ошибку
2. Пользователь `tootmine` нужно удалить (дубликат kasutaja)
---
## Анализ Проблемы
### 1. Несовпадение хэшей паролей
- **Бэкап БД**: использовал bcrypt хэши (`$2a$...`)
- **Код приложения**: использует SHA-256 хэши
- **Результат**: `verifyPassword()` не могла проверить пароли
### 2. Отсутствие колонки deleted_at
- Код: `WHERE deleted_at IS NULL`
- БД: колонка `deleted_at` отсутствовала в таблице `users`
- **Результат**: SQL ошибка → 500 Internal Server Error
---
## Решение
### 1. Обновление паролей (SHA-256)
```sql
-- admin / demo123
UPDATE users SET password_hash = 'd3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791'
WHERE username = 'admin';
-- aknaproff / demo123
UPDATE users SET password_hash = 'd3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791'
WHERE username = 'aknaproff';
-- kasutaja / tootmine
UPDATE users SET password_hash = 'a1026b7bd143f7190248bc79901e9a357a408e208f2d8e4d38fccf184754f35f'
WHERE username = 'kasutaja';
```
### 2. Удаление пользователя tootmine
```sql
DELETE FROM users WHERE username = 'tootmine';
```
### 3. Добавление колонки deleted_at
```sql
-- Для таблицы users
ALTER TABLE users ADD COLUMN deleted_at DATETIME DEFAULT NULL;
-- Для таблицы production_records (уже добавлено ранее)
ALTER TABLE production_records ADD COLUMN deleted_at DATETIME DEFAULT NULL;
```
---
## Текущее Состояние БД
### Пользователи (3 total)
| ID | Username | Password | Role | Access |
|----|----------|----------|------|--------|
| 1 | admin | demo123 | admin | Полный доступ |
| 2 | aknaproff | demo123 | admin | Полный доступ |
| 4 | kasutaja | tootmine | user | Просмотр + проблемы |
**Удалено:**
- ~~3. tootmine / tootmine / user~~ ❌ (дубликат, удалён)
### Production Records
- **Всего записей:** 38
- **Годы:** 2025, 2026
- **Месяцы:** Январь-Декабрь
### Schema Updates
`users.deleted_at` - добавлена
`production_records.deleted_at` - добавлена
Все индексы сохранены
---
## Тестирование
### Backend API Tests
```bash
# ✅ Admin login
curl -X POST http://localhost:3000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"demo123"}'
# → success: true, token: eyJ1c2VySWQiOjE...
# ✅ Aknaproff login
curl -X POST http://localhost:3000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"aknaproff","password":"demo123"}'
# → success: true, token: eyJ1c2VySWQiOjI...
# ✅ Kasutaja login
curl -X POST http://localhost:3000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"kasutaja","password":"tootmine"}'
# → success: true, token: eyJ1c2VySWQiOjQ...
```
### Frontend Tests
- ✅ Страница загружается
- ✅ Форма логина отображается
- ✅ Вход admin работает
- ✅ Вход aknaproff работает
- ✅ Вход kasutaja работает
- ✅ Guest режим работает
- ✅ Таблица с данными отображается
- ✅ Нет JavaScript ошибок
---
## Deployment на Production
### ⚠️ КРИТИЧНО: База данных изменена
Нужно выполнить 3 SQL команды на production:
```bash
# 1. Добавить колонку deleted_at в users
docker-compose exec aknaproff-backend sh -c \
"npx wrangler d1 execute webapp-production --local --command='ALTER TABLE users ADD COLUMN deleted_at DATETIME DEFAULT NULL'"
# 2. Удалить пользователя tootmine
docker-compose exec aknaproff-backend sh -c \
"npx wrangler d1 execute webapp-production --local --command='DELETE FROM users WHERE username = \"tootmine\"'"
# 3. Обновить пароли (SHA-256)
docker-compose exec aknaproff-backend sh -c \
"npx wrangler d1 execute webapp-production --local --command='
UPDATE users SET password_hash = \"d3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791\" WHERE username = \"admin\";
UPDATE users SET password_hash = \"d3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791\" WHERE username = \"aknaproff\";
UPDATE users SET password_hash = \"a1026b7bd143f7190248bc79901e9a357a408e208f2d8e4d38fccf184754f35f\" WHERE username = \"kasutaja\"
'"
```
### Проверка после deployment
```bash
# Проверить пользователей
docker-compose exec aknaproff-backend sh -c \
"npx wrangler d1 execute webapp-production --local --command='SELECT username, role FROM users'"
# Должно вернуть:
# admin | admin
# aknaproff | admin
# kasutaja | user
# (3 пользователя, tootmine удалён)
```
---
## Файлы для Копирования
**НЕ ТРЕБУЕТСЯ** - код не изменён, только база данных.
Если нужно обновить код (для v4.1.6):
```bash
# Быстрый вариант (рекомендуется)
scp dist/_worker.js user@server:/path/to/webapp/dist/
docker-compose restart
# ИЛИ Полный вариант
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/
cd /path/to/webapp && npm run build && docker-compose restart
```
---
## Статус
- **Версия:** v4.1.7 (DB Fix)
- **Код:** v4.1.6 (без изменений)
- **База данных:** ✅ Исправлена
- **Production URL:** https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.novita.ai
- **HTTP Status:** 200 OK
- **JavaScript Errors:** 0
- **Login Status:** ✅ Работает для всех пользователей
---
## Changelog
### v4.1.7 (2025-12-30) - Database Fix
- 🔧 **FIX:** Обновлены пароли с bcrypt на SHA-256
- 🔧 **FIX:** Добавлена колонка `deleted_at` в таблицу `users`
- 🗑️ **REMOVE:** Удалён пользователь `tootmine` (дубликат kasutaja)
-**VERIFY:** Все логины работают (admin, aknaproff, kasutaja)
- 📊 **DB:** 3 пользователя, 38 production записей
---
## Security Notes
### Пароли (SHA-256)
⚠️ **ВАЖНО:** SHA-256 используется для demo, в production рекомендуется bcrypt
**Текущие хэши:**
- `demo123``d3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791`
- `tootmine``a1026b7bd143f7190248bc79901e9a357a408e208f2d8e4d38fccf184754f35f`
### Рекомендации
1. В production использовать bcrypt или argon2
2. Включить rate limiting для /api/auth/login
3. Добавить CSRF защиту
4. Использовать HTTPS только
---
## Итог
**Проблема решена:**
- Login работает для всех пользователей
- Пользователь tootmine удалён
- База данных полностью совместима с кодом v4.1.6
🎯 **Готово к deployment на production**
Не забудьте выполнить SQL команды на production сервере!