- PCHIP для предпросмотра и серверного рендера - пресеты всех каналов в профиле, импорт и экспорт - мерж настроек auth без потери разделов - сохранение вкладки и правок текущего фото при переключении
6.2 KiB
6.2 KiB
Tasks
1. Общая математика кривой (TS + Go)
- 1.1 Заменить линейную интерполяцию в
frontend/src/lib/edit.tsна монотонный кубический Эрмит (PCHIP): наклоны, касательные, оценка между точками, плоские участки вне крайних — проверитьnpm run test(edit.test.ts, значения LUT и монотонность) - 1.2 Повторить ту же формулу в
backend/internal/photos/edit.go(curveEval/curveLUT) — проверитьgo test ./internal/photos/ -run TestCurve -v - 1.3 Сверить Go и TS на нескольких кривых (линейная, средний/сильный контраст, кривая с крайними внутри) захардкоженными значениями LUT — проверить оба набора тестов
2. Backend: мерж настроек и пресеты
- 2.1 Расширить
preferencesPayloadвbackend/internal/auth/handlers.goполемcurve_presetsи валидацией (лимит количества, имя 1..64, 2..16 точек на канал, x/y в 0..1) — проверитьgo test ./internal/auth/ -v - 2.2 Сделать серверный мерж разделов: читать текущие
preferences, мержитьphoto_info/curve_presets, писать и возвращать merged-объект — проверить тестом «сохранение photo_info не затирает пресеты и наоборот» - 2.3 Добавить e2e-проверку сохранения пресетов в профиле и их приватности — проверить
go test ./internal/e2e/ -run TestCurvePresets -v
3. UI: узлы и плавная кривая
- 3.1 Показывать крайние точки
(0,0)и(1,1)по умолчанию; первый клик вставляет точку между ними; крайние двигаются по x/y, вне них — плоские участки — проверить вручную иnpm run check - 3.2 Рисовать SVG-путь кубическими Безье по тем же касательным (плоские сегменты до/после крайних) — проверить визуально, что линия плавная
- 3.3 Сохранить клавиатурную правку точек, двойной клик-сброс и ограничение x между соседями — проверить
npm run checkи ручным сценарием
4. UI: пресеты и файлы
- 4.1 Заменить статичный «Линейный» на меню встроенных пресетов (
Линейный,Средний контраст,Сильный контраст) с активной подписью/«Пользовательский» — проверитьnpm run check - 4.2 Добавить тип
Preferences.curve_presetsи сохранение/применение/переименование/удаление пользовательских пресетов через существующий endpoint — проверитьnpm run testи сохранение в профиле - 4.3 Реализовать импорт/экспорт JSON
{ version: 1, presets: [...] }с валидацией и upsert по имени — проверить ручным импортом/экспортом иnpm run check
5. Интеграция и проверка
- 5.1 Прогнать
npm run check,npm run test,go test ./...,make build— всё зелёное - 5.2 Проверить, что WebGL и WASM используют новый LUT, а старые сохранённые кривые рендерятся плавно без миграции данных — визуально и тестами
- 5.3 Проверить приватность и лимиты пресетов (чужой профиль, слишком длинное имя, >16 точек) — тестами
internal/auth/internal/e2e
6. Правка: пресет описывает все каналы
- 6.1 Обновить
CurvePresetвfrontend/src/lib/types.tsиcurve-presets.ts:channelsдля RGB/R/G/B, встроенные пресеты и поиск активного пресета по всем каналам — проверитьnpm run test - 6.2 Обновить серверную модель и валидацию
curve_presetsвbackend/internal/auth/handlers.go: объектchannelsсо всеми четырьмя каналами — проверитьgo test ./internal/auth/ -v - 6.3 Обновить сохранение и применение в
PhotoEditPanel.svelteиCurvePresetMenu.svelte: сохранять и заменять все четыре канала, не переключать текущий канал — проверитьnpm run check - 6.4 Обновить импорт/экспорт и совместимость со старым форматом
{name, channel, points}, тесты и e2e — проверитьnpm run testиgo test ./internal/e2e/ -run TestCurvePresets -v
7. Переключение фото
- 7.1 Сохранять вкладку правой панели при смене фото, вынеся её состояние в
AlbumPanel— проверить в браузере - 7.2 Исправить регистрацию cleanup в
PhotoEditPanel, чтобы накопленные правки отправлялись при переключении — проверить в браузере - 7.3 Защитить панель от устаревших ответов сохранения/загрузки и кратковременного
photo = null— проверитьnpm run check
Workflow follow-up
- Архивировать изменение после удовлетворения требований ревью проекта.
- Проверить архивированный результат.