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

6.1 KiB
Raw Blame History

AKNAPROFF v4.1.12 - HOTFIX: Редактирование записей

Дата: 2025-12-31
Тип: HOTFIX - Критическое исправление
Статус: Production Ready


🐛 Исправленная проблема

Редактирование записей не сохранялось

Симптомы:

  • При редактировании записи (клик на строку) модальное окно открывается
  • После изменения данных и сохранения - запись не обновляется
  • Идёт GET запрос, но данные остаются прежними
  • После перезагрузки страницы изменения не видны
  • В модальном окне изменение даты тоже не сохраняется

Проблема:

  1. Backend НЕ обновлял таблицу status_checkboxes (где хранятся даты)
  2. Frontend передавал null для price вместо 0

Решение

1. Backend: Добавлено обновление status_checkboxes

Было (v4.1.11):

app.put('/api/records/:id', async (c) => {
  // Обновляется только production_records
  await c.env.DB.prepare(`
    UPDATE production_records 
    SET client_name = ?, ... 
    WHERE id = ?
  `).run()
  
  return c.json({ success: true })
})

Стало (v4.1.12):

app.put('/api/records/:id', async (c) => {
  // Обновляется production_records
  await c.env.DB.prepare(`
    UPDATE production_records 
    SET client_name = ?, ... 
    WHERE id = ?
  `).run()

  // ✅ Добавлено: Обновление status_checkboxes (даты)
  if (data.material_date !== undefined || 
      data.material2_date !== undefined || 
      data.package_date !== undefined) {
    await c.env.DB.prepare(`
      UPDATE status_checkboxes 
      SET material_date = ?,
          material2_date = ?,
          package_date = ?,
          updated_at = CURRENT_TIMESTAMP
      WHERE record_id = ?
    `).bind(
      data.material_date || null,
      data.material2_date || null,
      data.package_date || null,
      id
    ).run()
  }

  return c.json({ success: true })
})

2. Frontend: Исправлено значение по умолчанию для price

Было:

price: parseFloat(document.getElementById('price').value) || null  // ❌

Стало:

price: parseFloat(document.getElementById('price').value) || 0     // ✅

🧪 Тестирование

Тест 1: Обновление записи с датами

PUT /api/records/1
{
  "client_name": "Updated Client",
  "offer_number": "UPD-001",
  "price": "250.50",
  "material_date": "2025-01-15",
  "material2_date": "2025-01-16",
  "package_date": "2025-01-17"
}

Результат v4.1.11: Даты НЕ сохраняются
Результат v4.1.12: Даты сохраняются

Тест 2: Проверка сохранённых данных

production_records:

SELECT client_name, offer_number, price FROM production_records WHERE id = 1
-- Результат: Updated Client, UPD-001, 250.5 ✅

status_checkboxes:

SELECT material_date, material2_date, package_date 
FROM status_checkboxes WHERE record_id = 1
-- Результат: 2025-01-15, 2025-01-16, 2025-01-17 ✅

Тест 3: UI - Редактирование через модальное окно

  1. Открыть запись (клик на строку)
  2. Изменить имя клиента
  3. Изменить даты (material_date, material2_date, package_date)
  4. Сохранить

Результат: Все изменения сохраняются


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

Файл Изменения
src/index.tsx Добавлен UPDATE для status_checkboxes
public/static/app.js price: null → 0
public/original.html Cache v4.1.12
dist/_worker.js Пересобран

🔄 Миграция с v4.1.11

Обновление не требует изменений БД

# 1. Остановить
docker-compose down

# 2. Заменить код
cp new/dist/_worker.js dist/
cp new/src/index.tsx src/
cp new/public/ public/

# 3. Запустить
docker-compose up -d --build

📊 Сравнение версий

Параметр v4.1.11 v4.1.12
Редактирование записей Не работает Работает
Сохранение дат Не работает Работает
status_checkboxes UPDATE Нет Есть
price default null 0

Все проверки пройдены

  • Редактирование записей работает
  • Даты сохраняются (material_date, material2_date, package_date)
  • production_records обновляется
  • status_checkboxes обновляется
  • price = 0 по умолчанию
  • UI модальное окно работает корректно
  • После перезагрузки изменения видны

🎯 Статус

Версия: v4.1.12
Тип: HOTFIX
Критичность: Высокая (блокировала редактирование)
Совместимость: Полная обратная совместимость
Требуется миграция БД: Нет
Статус: Production Ready


📝 Changelog Summary

v4.1.12 (2025-12-31) - HOTFIX
- Fixed: Record editing not saving changes
- Added: status_checkboxes UPDATE in PUT endpoint
- Fixed: Date fields (material_date, material2_date, package_date) now save
- Changed: price default from null to 0 in frontend
- Status: Production Ready

ПРОБЛЕМА ИСПРАВЛЕНА! Редактирование записей и дат теперь работает корректно.