Маркетинговая информация — Редактирование слайда
Роут: /marketing/stores/{storeId}/slides/{slideId}/edit (или модалка-overlay поверх списка)
API: PUT /api/v1/admin/stores/{storeId}/marketing-slides/{slideId}
Источники
- Бизнес: Маркетинговая информация
- BR: BR 6.1
- API: Store Service API
Реализация — модалка или страница
Реализовать как модалку (быстрый workflow, не теряем контекст списка). Полноэкранный вариант — Phase 2 если потребуется.
Что видит пользователь
Большая модалка с тремя зонами:
┌──────────────────────────────────────────────────────────────┐
│ Редактирование слайда ✕ │
├──────────────────────────────────────────────────────────────┤
│ [Большое превью текущей картинки] │ Заголовок │
│ 16:9 │ [_____________] │
│ │ │
│ [Заменить картинку →] │ Активен [☑] │
│ │ │
│ │ Источник: Загружен │
│ │ Создан: 12.05.2026 │
│ │ Обновлён: 14.05.2026 │
├──────────────────────────────────────────────────────────────┤
│ [Удалить] [Отмена] [Сохранить] │
└──────────────────────────────────────────────────────────────┘
Поля формы
| Поле | Тип | Required | Поведение |
|---|---|---|---|
| Заголовок | Input | Да | Pre-filled, ≤ 200 символов |
| Активен | Switch | Нет | Pre-filled. Если выключаем 21-й активный — ok; если включаем 21-й — MARKETING_SLIDES_LIMIT_REACHED |
| Картинка (опционально) | File input | Нет | Кнопка «Заменить картинку». Открывает picker. Те же валидации что при загрузке нового |
Иммутабельные поля
source,source_ref,order,store_id— не отображаются для редактирования. Показываются как read-only метаданные.
Submit
Если картинка не менялась
PUT как JSON:
PUT /admin/api/v1/stores/{storeId}/marketing-slides/{slideId}
Content-Type: application/json
{ "title": "Hero CTA v2", "active": true }Если картинка менялась
PUT как multipart:
PUT /admin/api/v1/stores/{storeId}/marketing-slides/{slideId}
Content-Type: multipart/form-data
file: <new-binary>
title: "Hero CTA v2"
active: trueПосле успеха — закрыть модалку, обновить строку в списке.
Удаление
Кнопка «Удалить» (красная, в левом нижнем углу) → confirm-модалка:
Удалить слайд «Hero CTA»?
Слайд исчезнет из карусели на кассе через несколько секунд.
Действие необратимо.
[Отмена] [Удалить]
После подтверждения — DELETE /admin/api/v1/stores/{storeId}/marketing-slides/{slideId} → закрыть модалку → обновить список.
Состояния
| Состояние | Что показываем |
|---|---|
| Загрузка слайда | Skeleton поверх формы |
| Pristine | Кнопка «Сохранить» disabled |
| Изменения внесены | «Сохранить» активна |
| Submitting | Disabled-форма, лоадер |
| Ошибка validation | Inline под полями + toast |
| Ошибка лимит активных | MARKETING_SLIDES_LIMIT_REACHED → toast «Достигнут лимит 20 активных слайдов» |
| Ошибка not found | Toast «Слайд был удалён в параллельной сессии» + закрыть модалку, reload список |
AI-источник (read-only метаданные)
Если source = ai_photo_studio:
Источник: AI Photo Studio
Job ID: 7f3a-...
Preset: poster-coffee
[Открыть в AI Studio →] ← клик: открывает модалку Photo Studio в read-only с этим job_id
В BR 6.1 — read-only без действий. В BR 6.2 кнопка «Открыть в AI Studio» откроет AI Studio modal.
Ролевой доступ
marketing.read— модалка открывается в read-only режиме (поля disabled, кнопки «Сохранить»/«Удалить» скрыты)marketing.write— полное редактирование