Fortech
  • Aутстаффинг
  • Аутсорс
  • Веб-разработка
  • Мобильная разработка
  • ИИ-решения
  • UI/UX-дизайн
  • Техническая поддержка
Наши продуктыКейсыКонтактыО насБлогКарьера
Связаться
Наши продуктыКейсыКонтактыО насБлогКарьера
Связаться
Fortech
Юридический адрес
344011, Ростовская область, г. Ростов-на-Дону, Лермонтовская ул, д. 22, офис 6, 7, 8
ИНН / КПП
6154162274 / 616401001
ОГРН
1226100005922
ОКВЭД
62.01 Разработка компьютерного программного обеспечения
Код вида деятельности в области IT
1.01, 1.04, 1.05, 1.06

Услуги

  • Аутстаф
  • Аутсорс
  • Веб-разработка
  • Мобильная разработка
  • ИИ-решения
  • UI/UX-дизайн
  • Техническая поддержка

Компания

  • Наши продукты
  • Кейсы
  • Контакты
  • О нас
  • Блог

Соцсети

Аккредитованная IT-компания
Запись №25727 от 13.04.2022

Минцифры России

Позвать нас в тендер

  • bidzaar
  • B2B-Center
Контент © fortech.dev • 2026Политика конфиденциальностиПолитика обработки персональных данных
  1. Главная/
  2. Кейсы/
  3. Цифровая платформа сервисных заявок для крупной розничной сети

Цифровая платформа сервисных заявок для крупной розничной сети

Как мы построили модуль аварийных заявок и систему ролевого доступа для тысяч сотрудников ритейл-сети — на React, Redux-saga и TypeScript

О проекте

Внутренний портал для сотрудников крупной федеральной розничной сети — система, через которую магазины, распределительные центры и офисы решают операционные проблемы. Когда ломается холодильное оборудование, выходит из строя касса или нужно вызвать подрядчика — заявка идёт через этот портал. Система хранит историю обращений, контакты сервисных компаний и график профилактики.

Команда Fortech подключилась к развитию платформы на этапе масштабирования функционала. Задача — разработать новый модуль ЗНА (заявки на аварийное обслуживание), расширить интерфейсы для разных ролей пользователей и обеспечить стабильность после запуска в production. Работа велась в связке с backend-командой на Java/Spring и дизайнерами, использующими Material UI как основу UI-кита.

Задачи

  • Реализовать модуль ЗНА с подачей, редактированием и отслеживанием статусов аварийных заявок
  • Разработать систему ролевого доступа для магазинов, РЦ, офисных сотрудников и администраторов
  • Построить интерфейсы для работы с табличными данными, диаграммами и организационными схемами
  • Создать переиспользуемые UI-компоненты в Storybook с типизацией на TypeScript
  • Покрыть кодовую базу unit-тестами для критических сценариев работы с формами и state-менеджментом
  • Оптимизировать существующий код для снижения времени рендеринга сложных таблиц и форм

Frame 2131329902.png
Frame 2131329909 (1).png
Frame 2131329903.png

Реализация

Проект начался с аудита существующей архитектуры на React + Redux. Основная проблема — большое количество side-эффектов при обработке асинхронных запросов. Для управления логикой выбрана связка Redux + Redux-saga: саги позволили вынести работу с API в отдельные файлы, избежать callback hell и тестировать асинхронные флоу изолированно. Axios настроен с перехватчиками для обработки ошибок и автоматического обновления токенов. TypeScript помог избежать runtime-ошибок при работе со сложными объектами заявок, где одна неверная типизация поля могла сломать весь флоу подачи обращения.

Главный технический вызов — реализация системы ролевого доступа для разных типов пользователей. Роли определяли, какие заявки видны, какие действия доступны, какие поля можно редактировать. Решение построено на комбинации Redux-селекторов и Higher-Order Components: селекторы вычисляли набор прав из токена пользователя, а HOC оборачивали компоненты, динамически скрывая или блокируя элементы интерфейса. Для сложных форм с условной логикой использован react-hook-form — он снизил количество ре-рендеров и упростил валидацию полей, зависящих от роли. Backend на Spring интегрирован через Swagger-спецификацию, что дало автоматическую генерацию TypeScript-типов для API-контрактов.

ReactTypeScriptPostgreSQL

Для работы с таблицами и диаграммами на базе Material UI разработаны переиспользуемые компоненты в Storybook: DataGrid с виртуализацией для больших списков заявок, фильтры с debounce на redux-saga, модальные окна для редактирования. RabbitMQ на backend обеспечивал асинхронную обработку массовых обновлений статусов — фронт подписывался на события через WebSocket, обновляя Redux-стор без перезагрузки. PostgreSQL хранила историю заявок, что потребовало оптимизации запросов с пагинацией и кешированием на уровне саг. Покрытие тестами включало проверку саг, селекторов и логики форм — использовали Jest и testing-library для симуляции пользовательских сценариев.

Frame 2131329901 (1).png
Frame 2131329903 (1).png

Ключевые задачи и решения

  • Асинхронная обработка заявок – redux-saga с типизированными экшенами и API-вызовами через Axios с retry-логикой
  • Ролевой доступ – Redux-селекторы для вычисления прав + HOC для условного рендеринга компонентов
  • Сложные формы с валидацией – react-hook-form с интеграцией в Redux через саги для сохранения черновиков
  • Переиспользуемые UI-компоненты – Storybook с TypeScript-типизацией и документацией для дизайнеров
  • Работа с большими таблицами – виртуализация в Material UI DataGrid + debounce фильтров через redux-saga
  • Реалтайм-обновления статусов – WebSocket-подписка на события RabbitMQ с обновлением Redux-стора
  • Автогенерация типов API – Swagger-спецификация backend на Spring с конвертацией в TypeScript-интерфейсы

Результат

Сотрудники магазинов, РЦ и офисов получили единый интерфейс для подачи и отслеживания аварийных заявок с разделением по ролям. Модуль ЗНА позволил структурировать поток обращений, автоматизировать назначение исполнителей и отслеживать SLA. Таблицы с виртуализацией и реалтайм-обновлениями через WebSocket ускорили работу диспетчеров с сотнями заявок одновременно.

Бизнес получил масштабируемую платформу с переиспользуемыми компонентами в Storybook, что снизило время разработки новых разделов. Типизация на TypeScript и покрытие тестами уменьшили количество багов в production. Архитектура на Redux-saga позволила легко добавлять новые асинхронные флоу без переписывания кодовой базы. После запуска команда обеспечила стабильную поддержку с быстрым реагированием на инциденты.

Готовы выстроить стабильную команду?

Расскажите о проекте — предложим схему работы под ваш горизонт.

Написать в Telegram →

Примеры работ

Смотреть все кейсы
  • Корпоративная система застройщика

    Корпоративная система крупнейшего застройщика для коммуникации по объектам строительства

  • ADP - платформа для планирования и отслеживания строительных задач и процессов

    Разработка масштабируемой ERP-системы для девелоперов на стеке React/TS

Связанные услуги

  • Frontend-разработка
  • Aутстаффинг специалистов

Связаться с нами