# Модуль: Продавцы, избранное, подписки

[← К оглавлению](../README.md)

## Публичная карточка продавца

`app/Http/Controllers/SellerController.php` + `resources/views/seller/show.blade.php`:
- лого/аватар, имя/компания, рейтинг; кол-во отзывов — **кликабельно**, открывает модалку (Alpine `sellerReviews`), отзывы подгружаются постранично по 10 из `GET /seller/{seller}/reviews` («Показать ещё»);
- **описание продавки** (поле профиля) — блоком над объявлениями;
- «Показать номер» (`GET /seller/{seller}/phone`, **только авторизованным**; гостю — модалка авторизации), «Написать» (создаёт чат), «Подписаться» (Alpine `followBtn`);
- **жалоба на продавца** — кнопка-флажок → модалка → `POST /seller/{seller}/report` (`reports.target_user_id` + Telegram-алерт; нельзя на себя);
- вкладки **Активные / Завершённые** (бесконечная лента через `FeedController`, параметры `seller`+`status`);
- поиск по объявлениям продавца.

Маршруты:
```
GET  /seller/{seller}          seller.show
GET  /seller/{seller}/phone    seller.phone     (auth-only)
GET  /seller/{seller}/reviews  seller.reviews   (JSON, постранично)
POST /seller/{seller}/report   seller.report
```

## Избранное

- `app/Http/Controllers/FavoriteController.php` — `toggle` (AJAX, `POST /favorites/{ad}/toggle`) и `index` (страница кабинета).
- Связь `User::favorites()` (belongsToMany через `favorites`).
- Компонент `components/fav-heart.blade.php` + Alpine `favBtn`; «сердце» на каждой карточке. Состояние отрисовывается из `favoriteIds` (одним запросом через `ShareLayoutData`).
- Гость → «сердце»/«Подписаться» ведут на вход.

## Подписки (follow)

- `app/Http/Controllers/FollowController.php` — `toggle` (AJAX, `POST /sellers/{seller}/follow`).
- Связи `User::following()` / `User::followers()` (через `follows`).
- На новое объявление продавца подписчики получают уведомление (пакетами за 2ч) — см. [messaging.md](messaging.md).

См. также: [catalog.md](catalog.md), [messaging.md](messaging.md).
