Files
Aknaproff/HOTFIX_v4.1.16.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

4.5 KiB
Raw Blame History

🔧 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}

Цикл работает идеально


📦 ЧТО ИЗМЕНЕНО

Изменённые файлы:

  1. src/index.tsx - исправлена логика worksheets-cycle
  2. dist/_worker.js - пересобран с новой логикой
  3. 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