- Реструктуризация: 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
4.5 KiB
4.5 KiB
🔧 HOTFIX v4.1.16 - КРИТИЧЕСКИЕ ИСПРАВЛЕНИЯ
Дата: 2026-01-14
Тип: Critical Bugfix Release
Статус: ✅ Production Ready
🚨 КРИТИЧЕСКИЕ ПРОБЛЕМЫ ИСПРАВЛЕНЫ
Проблема 1: Даты не отображаются ❌➡️✅
Симптом:
- Поля Töölehti, LÕIKUS, KLAAS, VALMIS, VÄLJAS показывали пустые ячейки
- Даты были в БД, но не отображались в UI
- API возвращал даты, но frontend их не показывал
Причина:
database disk image is malformed: SQLITE_CORRUPT
База данных была повреждена из-за WAL-файлов
Решение:
# Удалить поврежденную БД
rm -rf .wrangler/state/v3/d1/miniflare-D1DatabaseObject/*.sqlite*
# Восстановить чистую копию
cp tootmine-aknaprof-dump.sqlite .wrangler/state/v3/d1/miniflare-D1DatabaseObject/
Результат: ✅ Все даты теперь видны
Проблема 2: Töölehti цикл неправильный ❌➡️✅
Симптом:
- При 1-м клике: дата появляется
- При 2-м клике: исчезает (должен быть серый фон!)
- При 3-м клике: появляется снова
- При 4-м клике: исчезает
Старая логика (НЕПРАВИЛЬНО):
// Step 1: empty -> confirmed (NO date) ❌
if (!worksheets_date && !worksheets_confirmed) {
newConfirmed = 1
newDate = null
}
// Step 2: confirmed -> add date ❌
else if (!worksheets_date && worksheets_confirmed) {
newConfirmed = 1
newDate = TODAY
}
// Step 3: with date -> empty ✅
else {
newConfirmed = 0
newDate = null
}
Новая логика (ПРАВИЛЬНО):
// Step 1: empty -> gray with date ✅
if (!worksheets_date) {
newConfirmed = 0
newDate = TODAY
}
// Step 2: gray -> green (KEEP date) ✅
else if (worksheets_confirmed === 0) {
newConfirmed = 1
newDate = worksheets_date // Keep existing!
}
// Step 3: green -> empty ✅
else {
newConfirmed = 0
newDate = null
}
Результат:
- ✅ 1-й клик: дата + серый фон
- ✅ 2-й клик: дата + зеленый фон
- ✅ 3-й клик: пусто
📋 ТЕСТИРОВАНИЕ
Test 1: Даты видны
curl "http://localhost:3000/api/records?month=1&year=2025" | jq '.[0]'
Результат:
{
"id": 1,
"worksheets_date": "2025-11-26",
"worksheets_confirmed": 1,
"cutting_date": "2025-01-10",
"glazing_date": "2025-01-12",
"ready_date": "2025-01-14",
"issued_date": "2025-01-15"
}
✅ Все даты возвращаются
Test 2: Töölehti 3-step цикл
# Step 1: Empty -> Gray
PATCH /api/records/2/worksheets-cycle
→ {"date": "2026-01-14", "confirmed": 0}
# Step 2: Gray -> Green
PATCH /api/records/2/worksheets-cycle
→ {"date": "2026-01-14", "confirmed": 1}
# Step 3: Green -> Empty
PATCH /api/records/2/worksheets-cycle
→ {"date": null, "confirmed": 0}
✅ Цикл работает идеально
📦 ЧТО ИЗМЕНЕНО
Изменённые файлы:
src/index.tsx- исправлена логика worksheets-cycledist/_worker.js- пересобран с новой логикойdata/.../2b35d4d42e3c9f6b5ad5b5579a7b1470c66e69f6b33a31e3f5a0095cc6d18656.sqlite- восстановлена чистая БД
🎯 БЫСТРОЕ ОБНОВЛЕНИЕ
На сервере:
# 1. Остановить сервисы
docker-compose down
# 2. Распаковать новый архив
unzip aknaproff_production_v4.1.16_FINAL.zip
# 3. Заменить файлы
cd backend/
docker-compose up -d --build
# 4. Проверить
curl http://localhost:8180/api/records?month=1&year=2025 | jq '.[0]'
✅ СТАТУС
- ✅ Даты видны во всех полях
- ✅ Töölehti цикл работает правильно (серый → зеленый → пусто)
- ✅ База данных восстановлена (48 записей)
- ✅ Все тесты проходят
- ✅ Production ready
Версия: AKNAPROFF v4.1.16
Архив: aknaproff_production_v4.1.16_FINAL.tar.gz (292 KB)
База данных: 48 реальных записей (2025-2026)
Docker: ARM Synology ready ✅