- Реструктуризация: 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
6.1 KiB
6.1 KiB
AKNAPROFF v4.1.12 - HOTFIX: Редактирование записей
Дата: 2025-12-31
Тип: HOTFIX - Критическое исправление
Статус: Production Ready ✅
🐛 Исправленная проблема
❌ Редактирование записей не сохранялось
Симптомы:
- При редактировании записи (клик на строку) модальное окно открывается
- После изменения данных и сохранения - запись не обновляется
- Идёт GET запрос, но данные остаются прежними
- После перезагрузки страницы изменения не видны
- В модальном окне изменение даты тоже не сохраняется
Проблема:
- Backend НЕ обновлял таблицу
status_checkboxes(где хранятся даты) - 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 - Редактирование через модальное окно
- Открыть запись (клик на строку)
- Изменить имя клиента
- Изменить даты (material_date, material2_date, package_date)
- Сохранить
Результат: ✅ Все изменения сохраняются
📝 Изменённые файлы
| Файл | Изменения |
|---|---|
| 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
ПРОБЛЕМА ИСПРАВЛЕНА! Редактирование записей и дат теперь работает корректно. ✅