Задача: Унифицировать интерфейсы заявок
Унифицировать интерфейсы заявок
Сейчас заявки на посетителей и заявки на внос/вынос - это разные сущности (на то были отдельные бизнес-требования со стороны заказчика, а так же отдельные права можно/нельзя). И исторически для работы с разными типами заявок были разные страницы и формы. Бизнес-логику и архитектору мы конечно же менять не будем, но вот интерфейсы можно и нужно унифицировать. Форму на создания делаем универсальную, просто добавляем переключатель Материальная или Просто на посетителя (просто чтобы корректней проверять заполненность формы, чтобы не получилось, что пользователь создал просто на посетителя, забыв указать что хочет занести или вынести, а фотма ему не подсветила). И на вывод можно использовать один интерфейс с использованием union-объекты в GraphQL.
Ворклоги
Унифицировал заявки на пропуска в GraphQL и новом личном кабинете
Исторически в системе Kilfor существовали три разных вида заявок на пропуска:
- заявки на посетителей;
- заявки на материальный внос/вынос;
- заявки на въезд автомобилей.
Для этих типов используются разные наборы таблиц в базе данных, а в отдельных сценариях различается и набор полей. Структуру БД и существующую бизнес-логику я намеренно не менял, чтобы не затрагивать стабильный legacy backend.
Унификацию сделал на уровне GraphQL API и frontend. В GraphQL добавлен union type и единые резолверы, которые позволяют получать разные типы пропусков через общий интерфейс. В результате заявки из разных источников теперь читаются и выводятся единым списком независимо от того, в каких таблицах они физически хранятся.
На frontend реализована единая форма создания заявки с переключателем типа пропуска. Пользователь работает с одним интерфейсом, а нужный набор полей и логика формы адаптируются под выбранный сценарий: посетитель, материальный внос/вынос или автомобиль.
Это убрало историческое раздробление интерфейса на несколько отдельных страниц и форм, при этом сохранило существующую структуру данных и права доступа. Получился единый UX для заявок на пропуска без рискованной миграции данных и переписывания MODX backend.