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

160
HOTFIX_v4.1.1.md Normal file
View File

@@ -0,0 +1,160 @@
# 🔥 HOTFIX v4.1.1 - Guest Mode Function Fix
**Дата**: 2025-11-28
**Версия**: v4.1.1
**Статус**: ✅ Production Ready
---
## 🐛 Проблема
**Ошибка в консоли**:
```
Uncaught ReferenceError: continueAsGuest is not defined
onclick https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.gensparksite.com/:1
```
**Симптомы**:
- Кнопка "Vaata ainult" (Только просмотр) не работала
- При клике появлялась ошибка в консоли
- Форма логина не закрывалась
- Guest режим не активировался
---
## 🔍 Анализ
**Причина**: Функция `continueAsGuest` была определена как обычная функция внутри блока, но не была доступна глобально для HTML onclick обработчика.
**Код до исправления**:
```javascript
function continueAsGuest() {
currentUser = { username: 'Guest', full_name: 'Guest User', role: 'guest' };
closeLoginModal();
showMainApp();
loadRecords();
}
```
**HTML**:
```html
<button type="button" onclick="continueAsGuest()">
<i class="fas fa-eye mr-2"></i>Vaata ainult
</button>
```
---
## ✅ Решение
**Изменение**: Сделали функцию глобальной через `window.continueAsGuest`
**Код после исправления**:
```javascript
// Make continueAsGuest globally accessible for onclick
window.continueAsGuest = function() {
// User chose to continue as guest (read-only mode)
currentUser = { username: 'Guest', full_name: 'Guest User', role: 'guest' };
closeLoginModal();
showMainApp();
loadRecords();
}
```
**Cache-busting**: Обновлена версия app.js с `4.1.0``4.1.1`
---
## 📝 Изменённые файлы
1. **public/static/app.js**
- Изменена функция `continueAsGuest``window.continueAsGuest`
- Добавлен комментарий о глобальной доступности
2. **public/original.html**
- Обновлена версия: `app.js?v=4.1.0``app.js?v=4.1.1`
3. **src/original-html.ts**
- Регенерирован embedded HTML с новой версией
4. **dist/_worker.js**
- Пересобран с исправлениями
---
## 🧪 Тестирование
**Шаги**:
1. Открыть страницу → появляется форма логина
2. Нажать "Vaata ainult" → форма закрывается, таблица показывается
3. Проверить консоль браузера → ошибок нет
4. Попробовать изменить данные → появляется alert (read-only режим)
**Результаты**:
- ✅ Кнопка "Vaata ainult" работает
- ✅ Форма логина закрывается
- ✅ Guest режим активируется
- ✅ Таблица загружается
- ✅ Консоль чистая (нет ошибок)
---
## 📦 Deployment
**Для обновления на production сервере**:
```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/
# На сервере пересобрать
cd /path/to/webapp
npm run build
docker-compose restart
```
**Альтернативный вариант (только dist)**:
```bash
# Скопировать только собранный файл
scp dist/_worker.js user@server:/path/to/webapp/dist/
docker-compose restart
```
---
## 🔗 URLs
- **Production**: https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.novita.ai
- **Git Commit**: Будет добавлен после коммита
---
## 📊 Итоговое состояние
**Версия**: v4.1.1
**Статус**: ✅ Production Ready
**JavaScript Errors**: 0
**HTTP Status**: 200 OK
**Page Load**: ~9s
**Функциональность**:
- ✅ Guest режим полностью работает
- ✅ Кнопка "Vaata ainult" функционирует
- ✅ Read-only доступ активируется
- ✅ Форма логина корректно закрывается
- ✅ Кнопка "Logi sisse" доступна в хедере
---
## 💡 Уроки
1. **Глобальные функции**: Функции, вызываемые из HTML onclick, должны быть глобальными (через `window.functionName`)
2. **Cache-busting**: При изменении JavaScript файлов обязательно обновлять версию (`?v=x.x.x`)
3. **Проверка консоли**: Всегда тестировать в браузере с открытой консолью
4. **Быстрые hotfix**: Для критических багов использовать минимальные изменения
---
**🎯 Статус**: Hotfix успешно применён, v4.1.1 готов к production deployment