Files
Aknaproff/DB_FIX_v4.1.7.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

229 lines
7.7 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.
# 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 сервере!