workspace "divan.ru architecture as-is" "Текущая архитектура divan.ru" { model { // --- People (assignment syntax; 2 строки, без лишних токенов) --- user = person "Пользователь" "Клиент." admin = person "Администратор" "Администрирование контента/операций." group "Внешние системы и сервисы" { // --- External systems/services --- giftery = softwareSystem "Giftery" "Сертификаты" { tags "External" } mindbox = softwareSystem "Mindbox" "CRM/маркетинг" { tags "External" } cylindo = softwareSystem "Cylindo" "3D/контент" { tags "External" } dadata = softwareSystem "DaData" "Подсказки/адреса" { tags "External" } geoip = softwareSystem "GeoIP" "IP-геолокация" { tags "External" } yandexGeocoder = softwareSystem "Яндекс геокодер" "Геокодирование" { tags "External" } googleSheets = softwareSystem "Google Sheets" "Таблицы" { tags "External" } paymentServices = softwareSystem "Платёжные сервисы" "Эквайринг/провайдеры платежей" { tags "External" } pek = softwareSystem "ПЭК" "Доставка/ПВЗ/города" { tags "External" } gtm = softwareSystem "GTM" "Google Tag Manager" { tags "External" } } group "Внутренние системы компании divan.ru" { // --- Other internal systems (not nested inside divan) --- onecUT = softwareSystem "1C УТ" "1C: Управление торговлей" { tags "Internal", "ERP" } onecUNF = softwareSystem "1C УНФ" "1C: Управление нашей фирмой" { tags "Internal", "ERP" } // (по схеме webcrm отмечен фиолетовым, т.е. “внутренние системы divan.ru”) webcrm = softwareSystem "WebCRM" "CRM (внутренняя система)" { tags "Internal", "CRM" } cdn = softwareSystem "CDN" "Раздача файлов" { tags "External" } expeditorApp = softwareSystem "Приложение экспедитора" "Клиент экспедитора" { tags "External", "Frontend", "MobileApp" description "App" } } group "Интернет-магазин Divan.ru" { // --- Main software system (assignment syntax) --- divan = softwareSystem "Интернет-магазин" "Платформа интернет-магазина divan.ru." { // Containers: // По вашему правилу: в определении только (name, short description), // а "технологию" кладём в attribute description внутри блока (с переносами строк). lk = container "ЛК/Корзина" "Корзина/история заказов/b2c-клиенты/b2b-пользователи" { tags "Internal", "Backend", "Microservice" description "PHP" } forms = container "Формы" "Сервис форм/заявок" { tags "Internal", "Backend", "Microservice" description "PHP" } i18n = container "Сервис локализации" "Локализация" { tags "Internal", "Backend" description "Node.js" } monolith = container "Монолит" "Основной backend (журнал/каталог/админка/платежи/шоурумы/заявки)" { tags "Internal", "Backend" description "PHP" adminPanel = component "Админка" "Система управления сайтом" monolithOrders = component "Заявки и заказы" monolithCatalog = component "Каталог" } geocoder = container "Геокодер" "Подсказки адресов" { tags "Internal", "Backend", "Microservice" description "Service" } imgTransform = container "Расчёт трансформации изображений" "Расчёт/подготовка трансформаций" { tags "Internal", "Backend", "Microservice" description "PHP" } deliveryCalc = container "Расчёт доставки" "Расчёт зон/стоимости/вариантов доставки" { tags "Internal", "Backend", "Microservice" description "PHP" } productConfig = container "Конфигурации товаров" "Конфигуратор/правила" { tags "Internal", "Backend", "Microservice" description "PHP" } promo = container "Промо" "Промо-логика" { tags "Internal", "Backend" description "Node.js" } promoCms = container "Промо CMS" "Админка/анонсные строки/промо-материалы/баннеры" { tags "Internal", "CMS" description "Strapi" } paymentsTx = container "Сервис платёжных транзакций" "Статусы/учёт транзакций" { tags "Internal", "Backend" description "PHP" } requestsTransform = container "Сервис трансформации заявок" "Нормализация/преобразование заявок" { tags "Internal", "Backend" description "PHP" } deliveryTracking = container "Сервис отслеживания доставки" "Трекинг доставок" { tags "Internal", "Backend" description "Python" } middleware = container "Прослойка" "Интеграционная прослойка" { tags "Internal", "Backend" description "Python" } pdfGenerator = container "Генерация PDF" "Сервис генерации PDF" { tags "Internal", "Backend" description "App" } // Databases/Queues: // containerDb/containerQueue нет — используем обычный container + tags "Database"/"Queue" // и shapes задаём через styles по тегам. postgres = container "PostgreSQL" "Основная БД" { tags "Internal", "Database" description "PostgreSQL" } elastic = container "Elasticsearch" "Поиск/индексация" { tags "Internal", "Database" description "Elasticsearch" } rabbit = container "RabbitMQ" "Очередь сообщений" { tags "Internal", "Queue" description "RabbitMQ" } rabbitPayments = container "RabbitMQ Payments" "Очередь сообщений" { tags "Internal", "Queue" description "RabbitMQ" } kafkaOrders = container "Kafka Orders" "Шина событий" { tags "Internal", "Queue" description "Kafka" } fileHandler = container "file handler" "Обработка/публикация файлов (декларации соответствия)" { tags "Internal", "Backend" description "PHP" } mobile = container "Мобильное приложение" "Mobile UI" { tags "Internal", "Frontend", "MobileApp" description "imshop.io" } frontend = container "Фронтенд" "Web UI" { tags "Internal", "Frontend", "Browser" description "Node.js" } analytics = container "Analytics" "Сбор/обработка аналитики" { tags "Internal", "Backend" description "Service" } proxy = container "proxy.divan.ru" "API gateway / BFF" { tags "Internal", "Gateway" description "Node.js" } morpher = container "Морфер" "Склонение/морфология" { tags "Internal" } } } // --- Пользователи --- user -> frontend "Использует" "HTTPS" { tags "Sync" } user -> mobile "Использует" "HTTPS" { tags "Sync" } admin -> promoCms "Управляет промо-контентом" "HTTPS" { tags "Sync" } admin -> adminPanel "Управляет товарами, пользователями" "HTTPS" { tags "Sync" } // --- Frontends -> Proxy --- frontend -> proxy "REST API" "HTTPS/JSON" { tags "Sync" } mobile -> proxy "REST API" "HTTPS/JSON" { tags "Sync" } // --- Frontend direct integrations --- frontend -> giftery "Сертификаты" "REST" { tags "Sync" } frontend -> mindbox "Маркетинговые события" "REST" { tags "Sync" } frontend -> webcrm "Интеграции CRM" "REST" { tags "Sync" } frontend -> dadata "Геопозиция" "REST" { tags "Sync" } frontend -> geoip "Геопозиция (Казахстан)" "REST" { tags "Sync" } frontend -> pdfGenerator "Запрос на генерацию PDF" { tags "Sync" } cylindo -> frontend "3D/контент" "REST" { tags "Sync" } // --- Analytics --- frontend -> analytics "События/метрики" "HTTP" { tags "Sync" } analytics -> gtm "Интеграция" "HTTP" { tags "Sync" } // --- Proxy -> Core services --- proxy -> monolith "REST API" "HTTPS/JSON" { tags "Sync" } lk -> proxy "REST API" "HTTPS/JSON" { tags "Sync" } proxy -> forms "REST API" "HTTPS/JSON" { tags "Sync" } proxy -> i18n "REST API" "HTTPS/JSON" { tags "Sync" } proxy -> promo "REST API" "HTTPS/JSON" { tags "Sync" } onecUNF -> deliveryTracking "REST API" "HTTPS/JSON" { tags "Sync" } // --- LK/Cart ↔ Monolith --- lk -> monolith "REST API" "Данные по товарам" { tags "Sync" } // --- Формы --- forms -> googleSheets "Оценки по заявкам" "REST" { tags "Sync" } forms -> onecUNF "Оценки по заявкам" "SOAP" { tags "Sync" } // --- LK интеграции --- webcrm -> lk "История посещений шоурумов" "REST" { tags "Sync" } mindbox -> lk "История заказов, b2b-клиенты, расчёт корзины, ПЛ" "REST" { tags "Sync" } mindbox -> onecUNF "Бонусный счет" "REST" { tags "Sync" } onecUNF -> mindbox "Заказы, статусы заказов" "REST" { tags "Sync" } // --- Монолит: хранилища/поиск --- monolith -> postgres "Читает/пишет" "SQL" { tags "Sync" } postgres -> productConfig "Читает данные по товарам" "SQL" { tags "Sync" } morpher -> monolith "Склонение слов" "REST" { tags "Sync" } monolithCatalog -> elastic "Индексирует/ищет" "HTTP" { tags "Sync" } // --- Монолит -> внешние платёжные сервисы --- monolith -> paymentServices "Платёжные операции/проверки" "REST" { tags "Sync" } // --- Монолит -> Geocoder --- monolith -> geocoder "GraphQL подсказки адресов" "HTTP/GraphQL" { tags "Sync" } geocoder -> dadata "Подсказки/адреса" "REST" { tags "Sync" } geocoder -> yandexGeocoder "Геокодирование" "REST" { tags "Sync" } monolithCatalog -> rabbit "Картинки для трансформации" "Sync" { tags "Sync" } // --- Async channels --- monolithOrders -> rabbitPayments "Статус платёжных транзакций" "AMQP (async)" { tags "Async" } monolithOrders -> kafkaOrders "Заявки" "Kafka (async)" { tags "Async" } kafkaOrders -> requestsTransform "Заявки" "Kafka (consume)" { tags "Sync" } requestsTransform -> onecUNF "Заявки" "SOAP" { tags "Sync" } onecUT -> monolithCatalog "Шоурумы, цены, остатки, ликвидации" "AMQP (async)" monolith -> onecUT "Заявки" "REST" rabbit -> imgTransform "Задачи трансформации изображений" "AMQP (consume)" imgTransform -> postgres "Состояния/метаданные" "SQL" rabbitPayments -> paymentsTx "Статус платёжных транзакций" "AMQP (consume)" paymentsTx -> onecUNF "Статус платёжных транзакций" "SOAP" deliveryCalc -> pek "Города, пункты выдачи" "REST" { tags "Sync" } deliveryCalc -> monolith "Стоимость доставки" "REST" { tags "Sync" } onecUNF -> deliveryCalc "Зоны доставки, стоимость" "SOAP" { tags "Sync" } // --- Конфигурации товаров --- productConfig -> proxy "Конфигурации товаров" "REST" { tags "Sync" } // --- Промо --- promoCms -> promo "Контент (админка/анонсы/материалы/баннеры)" "REST" { tags "Sync" } // --- 1C УНФ: товары/коллекции --- onecUNF -> monolithCatalog "Товары, коллекции" "REST" { tags "Sync" } // --- Файлы/декларации --- onecUNF -> fileHandler "Декларации соответствия" "REST" { tags "Sync" } fileHandler -> cdn "Публикация" "HTTP" { tags "Sync" } deliveryTracking -> frontend "Данные доставок/статусы" "REST" { tags "Sync" } monolith -> pdfGenerator "Данные по товарам" "REST" { tags "Sync" } expeditorApp -> middleware "Фото курьера, отзывы" "REST" { tags "Sync" } middleware -> monolith "Фото курьера" "REST" { tags "Sync" } monolith -> middleware "Отзывы" "REST" { tags "Sync" } } views { systemContext divan { include user include admin include * autolayout tb title "L1 — Системный контекст" } container divan "divanru" { include * title "L2 — Полный" } container divan "frontend-surface" { title "L2 Фронтенд и поддерживающие системы" description "Пользовательский контур: только то, что обслуживает клиентский UI." // actors + UI include user include frontend include mobile include proxy // core services used by UI include monolith include lk include promo include i18n include forms include deliveryTracking include analytics // external services used from UI/services in customer flow include giftery include mindbox include webcrm include cylindo include dadata include geoip include paymentServices include gtm include googleSheets include onecUNF include productConfig include googleSheets include pdfGenerator } container divan "admin-surface" { title "L2 Администрирование и управление сайтом" description "Операционный/административный контур: контент, заявки, ERP, очереди, файлы." include admin include monolith include promoCms } container divan "orders" { title "L2 Заявки и заказы" description "Оформление заявок, заказов, история заказов в ЛК, доставки и оплата" autolayout lr include user include frontend include proxy include monolith include onecUNF include paymentsTx include lk include mindbox include kafkaOrders include rabbitPayments include paymentsTx include requestsTransform include paymentServices include deliveryCalc include pek } container divan "catalog" { title "L2 Каталог и товары" description "Каталог, товарф, остатки, цены" include admin include user include frontend include proxy include monolith include onecUNF include onecUt include lk include rabbit include postgres include imgTransform include productConfig include elastic } container divan "monolith" { title "L2 Монолит" description "Монолит и связанные сервисы" include admin include proxy include monolith include onecUNF include onecUt include lk include rabbit include postgres include imgTransform include productConfig include elastic include kafkaOrders include rabbitPayments include paymentsTx include requestsTransform include paymentServices include deliveryCalc include pek include geocoder include yandexGeocoder include dadata include morpher include expeditorApp include middleware } styles { element "Person" { shape person } element "External" { background #FDE2E2 color #111111 border solid } element "Internal" { background #DFF1DF color #111111 border solid } element "ERP" { background #E6D9F2 color #111111 border solid } element "Database" { shape cylinder } element "Queue" { shape pipe } element "Gateway" { shape roundedbox } element "CMS" { shape roundedbox } element "Frontend" { shape roundedbox } element "Microservice" { shape hexagon } element "Browser" { shape WebBrowser } element "MobileApp" { shape MobileDevicePortrait } relationship "Sync" { style "solid" } element "CRM" { background #E6D9F2 color #111111 border solid } } } }