← все кейсы
кейс · EurasianTech · июнь 2025 — сейчас

GRID — B2B-платформа автоматизации бизнес-процессов

Мультитенантная платформа: конструктор форм, заявки, цепочки согласований, журналы, админка с системой прав IAM. Скриншотов нет — проект внутренний. Поэтому кейс построен на схемах и рассуждении.

Vue 3мультитенантностьIAMвнутренний продукт

Задача

Несколько компаний-арендаторов работают в одной системе: строят формы под свои процессы, запускают заявки по цепочкам согласований, ведут журналы. Права — на уровне IAM: кто видит, кто согласует, кто администрирует.

Работаю фронтенд-разработчиком в команде продукта: интерфейсы конструктора форм, заявок, журналов и админки, архитектура клиентской части.

Что было сложного

01

Архитектура фронта, которую нельзя нарушить случайно

Три слоя между сервером и экраном: api.js знает про HTTP, services — про домен, composables — про состояние. Компоненты «глупые»: только отображают, логики не содержат, и в api.js напрямую не ходят — это запрещено правилами линтера, а не договорённостью на словах. Список разрешённых легаси-импортов зафиксирован и постепенно сжимается.

api.jsHTTP, ничего большеservices/доменная логикаcomposables/состояние и реактивностькомпоненты«глупые»: только отображаютeslintno-restricted-importsграницы слоёвпроверяет CIлегаси-импорты:2024 ▮▮▮▮▮▮ 142025 ▮▮▮ 6сейчас ▮ 2 ↓
02

Один фильтр, две стратегии данных

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

фильтр по стадиямстадии принадлежат форместратегия «из формы»журнал: одна форма,стадии известны заранеестратегия «из строк»смешанный список: стадиивычисляются из загруженных строкматрица возможностейжурнал формы✓ фильтр из формысмешанный список✓ фильтр из строкархив— без фильтра по стадиям
03

Баг, у которого симптом и причина в разных слоях

Навигация ломалась в навбаре, но причина жила двумя слоями ниже: при разборе ответа IAM строка ролей разворачивалась спредом — и превращалась в массив символов. Каждый «символ-роль» дальше честно обрабатывался всей цепочкой. Такие баги и есть аргумент за слоистую архитектуру: путь поиска был коротким, потому что слои не перемешаны.

Что сделано

  • Конструктор форм и заявки, идущие по цепочкам согласований
  • Журналы операций и админка с IAM-правами
  • Трёхслойная архитектура фронта, закреплённая правилами линтера
  • Фильтр по стадиям с двумя инкапсулированными стратегиями данных

Результат

Архитектурные правила проверяются линтером в CI и не зависят от памяти команды. Платформа развивается, проект продолжается.

Похожая задача?

B2B-платформа, сложные процессы, права доступа — обсудим.

Обсудить проект
Asanali · Астана2026 · сделано без конструктора