workspace "Petrovich.Network Architecture" "Социальная сеть Петрович. Архитектура" { !docs docs model { system = softwareSystem "Petrovich Platform" "Многофункциональная платформа для профессионалов" { internalServices = group "Internal Services" { // Внутренние контейнеры adminUI = container "Admin Panel UI" "UI панели управления администратора" { technology "React" tags "Web_UI" } webUI = container "Petrovich.Network Web UI" "UI cайта Петрович.Network" { technology "React" tags "Web_UI" } ssrWebApp = container "SSR Web app" "Server-рендеринг html, кэш и роутинг" { technology "NodeJs" tags "Internal" } admin = container "Admin Panel API" "API панели управления администратора" { technology "Spring Boot" tags "Internal" } identity = container "Identity System" "Система авторизации и управления токенами" { technology "Keycloak" tags "Internal" } profile = container "User Profiles" "Система управления пользователями" { technology "Spring Boot" tags "Internal" } portfolio = container "Portfolio" "Система управления портфолио пользователей" { technology "Spring Boot" tags "Internal" } feed = container "News Feed" "Лента новостей и рекомендаций" { technology "Spring Boot" tags "Internal" } search = container "Search" "Поисковая система" { technology "Spring Boot + Elasticsearch" tags "Internal" } content = container "Content Management" "Система управления контентом" { technology "Spring Boot" tags "Internal" } mediaTransformer = container "Media Transformer" "Сжатие и ререндеринг контента" { technology "Spring Boot" tags "Internal" } notification = container "Notifications" "Система уведомлений" { technology "Spring Boot + WebSockets" tags "Internal" } common = container "Common API" "Общий API-модуль" { technology "Spring Boot" tags "Internal" } qa = container "Q&A Module" "Модуль вопросов и ответов" { technology "Spring Boot" tags "Internal" } ai = container "AI Assistant" "Искусственный интеллект" { technology "ML Models" tags "Internal" } } // Внешние системы //petrovichServices = group "Petrovich Services" { petrId = container "Petrovich.Id" "Система идентификации Петрович" { technology "OAuth2 Provider" tags "External, PetrovichExternal" } petrKnow = container "Petrovich.Know" "Система знаний Петрович" { technology "Recommendation Engine" tags "External, PetrovichExternal" } petrProfMarket = container "Petrovich.ProfMarket" "Биржа профессионалов" { technology "REST API" tags "External, PetrovichExternal" } petrMarket = container "Petrovich.Market" "Магазин товаров" { technology "eCommerce API" tags "External, PetrovichExternal" } //} s3 = container "S3 Storage" "Облачное хранилище" { technology "AWS S3" tags "External" } rabbit = container "RabbitMq" "Брокер очередей" { technology "RabbitMq(AMQP)" tags "External" } externalIntegrations = container "External Integrations" "Внешние интеграции" { technology "Я.Услуги, Профи.ру, Авито, VK" tags "External" } } // Связи между контейнерами portfolio -> externalIntegrations : "Аутентификация, данные для портфолио" portfolio -> ai : "Получает рекомендации" portfolio -> petrProfMarket : "Получает данные портфолио" portfolio -> content : "Загружает и Получает контент" portfolio -> common : "Получает подписки и подписчиков" admin -> content : "Модерация контента" admin -> ai : "Управление ИИ-активностью" admin -> notification : "уведомления об изменении/удалении контента" profile -> portfolio : "Обмен данными" identity -> profile : "Получает данные пользователей" identity -> petrId : "Регистрация и аутентификация пользователей" adminUI -> identity : "Получение токенов" webUI -> ssrWebApp : "Запросы html и данных" ssrWebApp -> identity : "Получение токенов аутентификации" ssrWebApp -> portfolio : "Запрос данных для рендеринга" ssrWebApp -> feed : "Запрос данных для рендеринга" ssrWebApp -> content : "Запрос данных для рендеринга" feed -> portfolio : "Получает данные" feed -> common : "Получает подписки" feed -> content : "Получает контент" feed -> notification : "Отправляет обновления" feed -> petrKnow : "Получает рекомендации" feed -> petrMarket : "Получает популярные товары" search -> content : "Поиск контента" search -> portfolio : "Поиск портфолио" search -> qa : "Поиск вопросов" content -> ai : "Получает рекомендации" content -> petrKnow : "Получает тематики" content -> petrMarket : "Получает товары" content -> rabbit : "Команды на сжатие и ререндеринг" rabbit -> mediaTransformer : "Команды на сжатие и ререндеринг" mediaTransformer -> s3 : "Загружает медиа-файлы" mediaTransformer -> content : "Результаты сжатия и ререндеринга, ссылки" qa -> content : "Создает контент для вопросов" qa -> notification : "Уведомления об ответах" qa -> petrKnow : "Получает тематики" qa -> ai : "Получает ИИ-ответы" ai -> content : "Создает активность" } views { container system "AllContainers" "Все контейнеры" { include * autoLayout lr } container system "InternalContainers" "Внутренние контейнеры" { include * exclude "element.tag==External" autoLayout lr } container system "ExternalContainers" "Внешние контейнеры" { include "element.tag==External" autoLayout tb } container system "PortfolioOnly" "Связи Портфолио" { include "->portfolio" include "portfolio->" autoLayout lr } container system "FeedOnly" "Связи Ленты" { include "->feed" include "feed->" autoLayout lr } container system "ContentOnly" "Связи Контента" { include "->content" include "content->" include "->mediaTransformer" include "mediaTransformer->" autoLayout lr } container system "AIOnly" "Связи AI-помощника" { include "->ai" include "ai->" autoLayout lr } container system "IdentityOnly" "Связи Identity" { include "->identity" include "identity->" include "->ssrWebApp" autoLayout lr } container system "ExternalRelations" "Связи c Внешними сервисами" { include "->element.tag==External" include "element.tag==External->" autoLayout lr } styles { element "Element" { shape RoundedBox } element "Web_UI" { shape WebBrowser } element "Internal" { background #009966 color #ffffff } element "External" { background #006699 color #ffffff } element "Container" { background #438dd5 color #ffffff } element "Component" { background #85bbf0 color #000000 } element "PetrovichExternal"{ background #F3CF02 color #000000 } } } }