106 lines
5.6 KiB
Markdown
106 lines
5.6 KiB
Markdown
# SuperSam: Обзор системы
|
||
|
||
`SuperSam` — это система управления доставкой заказов. В текущем scope она состоит из трёх внутренних ролей и одной публичной страницы для клиента: менеджер, логист, водитель и клиент.
|
||
|
||
## Задачи приложения
|
||
|
||
- показать менеджеру единый реестр доставочных заказов с поиском и карточкой заказа;
|
||
- показать логисту список доставок на сегодня и ближайшие дни с половинами дня;
|
||
- показать водителю свои доставки, адрес, состав заказа и базовые статусы;
|
||
- дать клиенту публичную ссылку, по которой он выбирает дату и половину дня доставки;
|
||
- хранить состояние заказов, приглашений и истории изменений в Supabase.
|
||
|
||
## Роли
|
||
|
||
### Менеджер
|
||
|
||
- видит список заказов доставки;
|
||
- ищет по номеру заказа, клиенту и телефону;
|
||
- открывает карточку заказа и смотрит состав, комментарии и историю;
|
||
- не работает с созданием заказов и внутренними служебными экранами.
|
||
|
||
### Логист
|
||
|
||
- видит заказы, готовые к доставке;
|
||
- смотрит ближайшие даты: сегодня, завтра и послезавтра;
|
||
- смотрит половину дня и текущий статус доставки;
|
||
- открывает карточку заказа, чтобы свериться с деталями.
|
||
|
||
### Водитель
|
||
|
||
- видит только свои доставки;
|
||
- открывает адрес, клиента, состав заказа и комментарии;
|
||
- меняет базовый статус доставки по маршруту.
|
||
|
||
### Клиент
|
||
|
||
- получает публичную ссылку вида `/delivery/:token`;
|
||
- видит номер заказа и состав заказа;
|
||
- выбирает дату и половину дня: `До обеда` или `После обеда`;
|
||
- подтверждает выбор без входа во внутренний кабинет.
|
||
|
||
## Основные сценарии
|
||
|
||
### Внутренний сценарий
|
||
|
||
1. Заказ появляется в Supabase.
|
||
2. Менеджер видит его в реестре и сверяет состав.
|
||
3. Логист отслеживает готовность и ближайшее окно доставки.
|
||
4. Водитель получает свою доставку и доводит её до результата.
|
||
|
||
### Сценарий клиента
|
||
|
||
Клиентская страница работает по token из таблицы `public.delivery_invitations`.
|
||
|
||
После загрузки seed можно открыть ссылку:
|
||
|
||
`/delivery/client-flow-1001`
|
||
|
||
Эта ссылка показывает:
|
||
- заказ `CD-240031`;
|
||
- состав заказа;
|
||
- четыре варианта слота;
|
||
- две даты;
|
||
- две половины дня: `До обеда` и `После обеда`.
|
||
|
||
После подтверждения выбора:
|
||
- invitation переводится в состояние `agreed`;
|
||
- заказ переводится в `Доставка согласована`;
|
||
- в `order_history` появляется запись о подтверждении;
|
||
- в `delivery_slots` фиксируется подтверждённый слот.
|
||
|
||
## Что хранится в Supabase
|
||
|
||
- `public.users` — пользователи и роли;
|
||
- `public.orders` — заказы и текущие статусы;
|
||
- `public.order_history` — история изменений;
|
||
- `public.delivery_slots` — возможные и подтверждённые слоты доставки;
|
||
- `public.delivery_invitations` — публичные invitation token и состояние клиентского flow;
|
||
- `public.integration_events` — технические и интеграционные события.
|
||
|
||
## Как подготовить систему к показу
|
||
|
||
1. Загрузить схему `supabase/schema.sql`.
|
||
2. Выполнить `supabase/seed/stage-1-demo.sql`.
|
||
3. Убедиться, что развернуты Edge Functions:
|
||
- `get-delivery-invitation`
|
||
- `confirm-delivery-choice`
|
||
- `create-delivery-invitation`
|
||
4. Открыть внутренний кабинет и пройти вход под ролью.
|
||
5. Открыть клиентскую ссылку `/delivery/client-flow-1001`.
|
||
|
||
## Что показывать на встрече
|
||
|
||
- вход менеджера, логиста и водителя;
|
||
- реестр заказов и карточку заказа;
|
||
- список доставок по датам для логиста;
|
||
- карточку доставки водителя;
|
||
- клиентскую ссылку с выбором даты и половины дня.
|
||
|
||
## Полезные документы
|
||
|
||
- [README](/Users/mihailkucer/Documents/super-sam/README.md)
|
||
- [Архитектура](/Users/mihailkucer/Documents/super-sam/docs/architecture.md)
|
||
- [Сценарии](/Users/mihailkucer/Documents/super-sam/docs/scenarios.md)
|
||
- [Edge Functions](/Users/mihailkucer/Documents/super-sam/supabase/functions/README.md)
|