# Приёмка liderra.ru — ПУНКТ №24: «Помощь» — заявка в поддержку (G7-A)

> **Для исполнителя:** формат PR1 (одобрен 20.06). Каждый шаг = `🔧 Код-факт (file:line)` · `🎬 Действие` · `📋 ОТЧЁТ (было→ожидали→стало + 📸/📝)` · `❌ Если не так`. Техника «под капотом»; владельцу — человеческие карточки.

**Цель:** показать, что клиент может из кабинета **обратиться в поддержку**: заполняет короткую форму (имя/контакт/сообщение, частично предзаполнены из профиля), отправляет — заявка **всегда сохраняется**, даже если почта поддержки временно недоступна (письмо — дополнение, не условие). Плюс — живой чат поддержки, если он подключён.

**Что снимаем глазами:** раздел **Помощь** (форма → «Заявка отправлена»), чат-виджет. Живые 📸.

**Источник сценария:** свод проверок №24 (G7-A); новая фича деплоя 19.06.

---

## 🔧 Код-факты (подтверждено чтением 20.06)

- **Заявка создаётся всегда** — `store` сохраняет `support_requests` (с `tenant_id`) в транзакции, возвращает **201** — [SupportRequestController.php:23-53](../../../app/app/Http/Controllers/Api/SupportRequestController.php#L23-L53), запись — [:34-42](../../../app/app/Http/Controllers/Api/SupportRequestController.php#L34-L42).
- **Письмо — best-effort** — заявка уже в БД; сбой SMTP **не теряет** её и **не валит** запрос (паттерн как код-письмо онбординга) — [:19](../../../app/app/Http/Controllers/Api/SupportRequestController.php#L19), [:46-48](../../../app/app/Http/Controllers/Api/SupportRequestController.php#L46-L48).
- **Валидация** — поля имя/контакт/сообщение обязательны; пусто → 422 — [:25-33](../../../app/app/Http/Controllers/Api/SupportRequestController.php#L25-L33).
- **Изоляция (RLS)** — `SET LOCAL app.current_tenant_id`; клиент видит/создаёт только свои заявки — [:35](../../../app/app/Http/Controllers/Api/SupportRequestController.php#L35).
- **Чат-виджет JivoSite** — виден, если задан `JIVO_WIDGET_ID` (иначе скрыт).

---

## Шаг 24-1 — Отправить заявку в поддержку

**🔧 Код:** [store :23-53](../../../app/app/Http/Controllers/Api/SupportRequestController.php#L23-L53).
**🎬 Действие (лок):** в разделе Помощь заполнить форму (имя/контакт предзаполнены из профиля, дописать сообщение) → отправить.

**📋 ОТЧЁТ:**
| Что | Было | Ожидалось | Стало (факт) | Чем подтверждаем |
|---|---|---|---|---|
| Форма | пустая/предзаполнена | после отправки — «Заявка отправлена» | _(слот прогона)_ | 📸 Помощь (форма → алерт «отправлена») |
| Заявка в базе | нет | создана (со своим tenant_id) | _(слот)_ | 📝 `support_requests` (своя строка) |
| Письмо поддержке | — | поставлено в очередь (best-effort) | _(слот)_ | 📝 очередь письма (внутр.) |

**💡 Что внутри:** клиент может прямо из кабинета написать в поддержку — часть полей уже заполнена за него. Заявка сразу сохраняется в системе, а письмо поддержке — это дополнение: даже если почта на минуту откажет, обращение не потеряется.

**❌ Если не так:** заявка не сохранилась при сбое почты → дефект (best-effort нарушен).

---

## Шаг 24-2 — Пустую форму не отправить (валидация)

**🔧 Код:** [:25-33](../../../app/app/Http/Controllers/Api/SupportRequestController.php#L25-L33).
**🎬 Действие (лок):** отправить форму с пустыми полями.

**📋 ОТЧЁТ:**
| Что | Было | Ожидалось | Стало (факт) | Чем подтверждаем |
|---|---|---|---|---|
| Пустая отправка | — | **не принимается** (просит заполнить) | _(слот)_ | 📸 Помощь (ошибки полей) |

**❌ Если не так:** пустая заявка создаётся → мусор в поддержке.

---

## Шаг 24-3 — Изоляция и чат-виджет

**🔧 Код:** RLS — [:35](../../../app/app/Http/Controllers/Api/SupportRequestController.php#L35); JivoSite — по `JIVO_WIDGET_ID`.
**🎬 Действие (лок):** проверить, что клиент видит только свои заявки; чат-виджет отображается при заданном ключе.

**📋 ОТЧЁТ:**
| Что | Было | Ожидалось | Стало (факт) | Чем подтверждаем |
|---|---|---|---|---|
| Чужие заявки | — | не видны (только свои) | _(слот)_ | 📝 RLS: только свой tenant |
| Чат поддержки | — | виден, если ключ задан | _(слот)_ | 📸 виджет чата (или его отсутствие без ключа) |

**❌ Если не так:** видны чужие заявки → утечка (связка с №16).

---

## Verification №24 (выход из пункта)
- [ ] 📸 Заявка отправляется, показывается «Заявка отправлена».
- [ ] 📝 Запись `support_requests` создаётся всегда (даже при сбое почты).
- [ ] 📸 Пустая форма не принимается (валидация).
- [ ] 📝 Изоляция: только свои заявки; 📸 чат-виджет при заданном ключе.

## 📸 vs 📝 в этом пункте
- **📸 Скриншот:** Помощь (форма, алерт «отправлена», ошибки валидации), чат-виджет.
- **📝 Текст:** запись в `support_requests`, очередь письма, RLS — текстом.

## Грабли
- Письмо best-effort — для проверки «заявка не теряется» сымитировать сбой почты (на dev MAIL в лог) и убедиться, что запись всё равно создана.
- Чат-виджет — только при заданном `JIVO_WIDGET_ID`; без ключа его отсутствие — норма.
- Уже показано в эфире (карточка 7) — здесь углубление best-effort/валидации/изоляции.
