supersam/docs/architecture.md

7.7 KiB
Raw Blame History

Архитектура фронтенда

Модули

  • src/context/AuthContext.jsx — OTP-аутентификация через Supabase Auth и загрузка профиля пользователя с ролью. Неизвестный email показывает подсказку обратиться к администратору.
  • src/context/ThemeContext.jsx — управление светлой и тёмной темой через data-theme.
  • src/hooks/usePwaStatus.js — клиентское состояние PWA: online/offline, install prompt, standalone и offline readiness.
  • src/hooks/useOrders.js — локальный state заказов, истории, чатов, фильтров, действий и сгруппированных наборов доставки (deliverySetBuckets).
  • src/services/deliverySetViews.js — чистые функции группировки импортированных заказов в наборы доставки с buckets: «На подходе», «Готово к запуску», «Ожидает клиента», «Нужна ручная работа», «Согласовано», «Завершено».
  • src/services/orderService.js — чистые функции бизнес-логики заказов, покрытые тестами.
  • src/services/supabase/orderRepository.js — адаптер реальных чтений/записей заказов и чатов в Supabase, включая source-поля 1С и delivery-set поля.
  • src/services/driverDeliveries.js — фильтрация и группировка доставок для рабочей области водителя.
  • src/layouts/AppShell.jsx — общий shell с боковой навигацией, уведомлениями и переключением темы.
  • src/components/logistics/LogisticsReadinessBoard.jsx — интерактивная доска с bucket-ами наборов доставки.
  • src/components/logistics/DeliverySetDetailPanel.jsx — детальная карточка набора доставки: source-поля 1С, production-шаги, слоты, действия.
  • src/components/client/DeliverySlotsPicker.jsx — публичный виджет выбора даты и половины дня доставки.
  • src/components/client/DeliveryChoiceFlow.jsx — публичный поток согласования доставки по приглашению.
  • src/components/client/DeliveryStateNotice.jsx — информационный экран для clients со статусом ссылки.
  • src/components/orders/* — фильтры, список заказов, карточка заказа, история статусов и поиск по чату.
  • src/components/orders/OrderEditorPanel.jsx — создание и редактирование заказа менеджером или администратором.
  • src/components/dashboard/ProductionQueuePanel.jsx — отдельный блок производственной очереди.
  • src/components/dashboard/RoleWorkspacePanel.jsx — рабочая панель с delivery-set bucket-ами для логиста.
  • src/components/admin/UserDirectoryPanel.jsx — панель пользователей, ролей и последних входов.
  • src/components/logistics/BotControlPanel.jsx — сценарии отправки в чатбот и переноса слотов доставки.
  • src/components/admin/AuditPanel.jsx — журнал ошибок, исключений и обзор последних системных событий.

Ролевой доступ

  • 1С остаётся источником создания и прогресса заказов. Веб-приложение не создаёт заказы.
  • Начальник производства переводит заказ через очередь и производство к готовности.
  • Логист видит наборы доставки, слоты, сообщения чатбота и ручную обработку исключений.
  • Водитель видит только назначенные доставки и может переводить их через статусы Загружен, В пути, Доставлен, Проблема доставки.
  • Администратор видит весь массив заказов, доставок и системные логи.
  • Клиент не является авторизованным пользователем приложения. Клиент использует публичную ссылку приглашения.

Ключевые экраны

  • /login — email + OTP flow. При отсутствии VITE_SUPABASE_* включается demo-режим. Подсказка проверять входящие и спам. Неизвестный email: «Email не найден в системе. Обратитесь к администратору.»
  • /dashboard — role-based control center: для логиста — LogisticsReadinessBoard с наборами доставки, для водителя — план маршрута и быстрые действия.
  • /delivery/:token — публичная страница согласования доставки для клиента.
  • public/manifest.webmanifest + public/service-worker.js — installable PWA-оболочка и базовое кеширование shell для demo offline.

Источник заказов: 1С → Supabase

  • Заказы импортируются из 1С через XML и сохраняются в public.orders с source-полями: source_order_number, source_customer_name, source_accept_at, source_ship_at и т.д.
  • Заказы группируются в наборы доставки (delivery sets) по delivery_set_key из n8n или по нормализованному телефону+имя клиента.
  • Набор доставки считается готовым к запуску, когда все его заказы имеют source_accept_at и ни один не имеет source_ship_at.
  • Поле source_sms_legacy_at сохраняется как историческое и не должно запускать новый сценарий доставки.

Дизайн-концепт

  • Минималистичная сетка с крупными панелями, прозрачными поверхностями и мягкими границами.
  • Светлая тема использует холодно-зелёный акцент на светлом фоне.
  • Тёмная тема построена на глубоких графитовых поверхностях с ярким мятным accent.
  • Мобильная версия складывает layout в вертикальный поток; боковая панель становится верхним блоком.

Интеграционный слой

  • src/supabaseClient.js создаёт клиент Supabase через env-переменные.
  • src/services/safeSupabaseCall.js стандартизирует обработку ошибок.
  • Данные UI разложены по сущностям, совпадающим с таблицами Supabase: orders, order_history, chat_messages, delivery_slots, delivery_invitations.
  • В orders синхронизированы поля status, delivery_agreement_status, assigned_driver_id, а также source-поля 1С и delivery-set данные.