# Архитектура проекта ## Структура Проект делится на следующие решения: * Сервер балансировки (nginx) * Мастер‑система (1С‑сервер) * Бэкенд * PlatformAPI (агрегация микросервисов в узел) * Набор микросервисов * Фронтенд (PWA-приложения) * Интернет магазин (Shop PWA) * Административное приложение (Admin PWA) ### Сервер балансировки В качестве сервера балансироваки используется [nginx](https://nginx.org/). По текущим нагрузкам не требуются какие-то особенные настройки. [Посмотреть текущие настройки](/docs/backend/nginx_conf.md) ### Мастер‑система (1С‑сервер) Находится на стороне заказчика. Не имеет публичных точек подключения. Взаимодействие осуществляется через микросервис Connector1CService (см. документацию в коде). ### Фронтенд * Интернет магазин (Shop PWA) - web-сайт магазин строительных материалов и товаров для дома (каталог, поиск, карточка товара, корзина, оформление заказа, личный кабинет, отзывы/вопросы, избранное). * Административное приложение (Admin PWA) - инструменты для сотрудников: управление справочниками, публикация контента и статей, модерация отзывов и вопросов, настройка акций/промо, просмотр и обработка заказов и доставок, ответы службы поддержки. PWA взаимодействую с системой через сервер балансировки и PlatformAPI. Для взаимодействия используются HTTP-запросы. PlatformAPI проверяет доступы и права и контролирует разрешенность запросов к микросервисам на основе выданных прав пользователю. [Подробнее](/docs/frontend/index.md) #### Интернет магазин Микросервисы, с которыеми имеется взаимодействие: * AuthService - аутентификация и авторизация (телефон, SMS/flash-call, выдача токена, управление сессией). * ProfilesService - управление данными пользователя, получение информации о своем пользователе. * FilesDirectoryService - хранение, управление файлами/медиа и их получение. * SearchService - поиск нужного набора товаров по заданным параметрам. * DirectoryService - получение информации о категориях, брендах, товаров. * FavoriteService - функционал избранных товаров. * HeadHuntService - получение списка вакансий, оставление заявки. * BusinessService - корзина, формирование заказа, получение информации о заказах. * ReviewsService - получение существующих и создание новых отзывов и вопросов о товарах * ArticlesService - получение публикация и статей * SupportService - формирование запроса в техподдержку * DeliveryService - формирование рассчета стоимости доставки с учетом параметров. Так же интернет магазин взаимодействуюет со следующими внешними сервисами, через подключенные скрипты: * Яндекс метрика * Top.mail.ru counter * Calltouch (на уровне кода отправляет помеченные события (см. код)) * AnyQuery (поисковая аналитика) #### Административное приложение Микросервисы, с которыеми имеется взаимодействие: * AuthService - аутентификация и авторизация (телефон, SMS/flash-call, выдача токена, управление сессией). * ProfilesService - управление пользователями, профили, доступы, телефоны, email. * FilesDirectoryService - хранение, управление файлами/медиа и их получение. * SearchService - индексация и поиск: работа с синонимами, опечатками, выдача релевантных товаров. * DirectoryService - получение информации о категориях, брендах, товаров. * HeadHuntService - вакансии: публикация, редактирование, архивирование офферов, отклики и их обработка. * ReviewsService - отзывы и вопросы: постинг, модерация, лайки/дизлайки, отчёты по товарам. * ArticlesService - публикация статей: создание, обновление, архивирование, публикация, выборка. * SupportService - техподдержка: закрытие запросов, выборка запросов. ### Мастер-система 1С 1С на стороне заказчика является **источником истины** для товарного каталога, цен, остатков и статусов заказов. Она обменивается данными с платформой через специальный сервис-адаптер — **Connector1CService**, который преобразует данные из формата 1С в формат платформы и обратно. Таким образом достигается совместимость без жёсткой привязки архитектуры к особенностям 1С. ### Бэкенд Бэкэнд представлен набором микросервисов и агрегатором ProfiMall.ServerAPI (PlatformAPI), который открывает внешний доступ к ним через API поддерживая OpenAPI. Микросервисы взаимодействуют между собой на функциональном уровне в пределах одного приложения, если они работают в пределах одного домена (агрегатора). При необходимости (увеличенные нагрузки, нехватка мощностей) отдельные микросервисы можно вынести в отдельный домен на другой физический (или виртуальный) сервер. В этом случае их взаимодействие будет через HTTP API. [Подробнее](/docs/backend/index.md) //TODO уделить больше внимания архитектуре бэкэнда (программным слоям) #### Микросервисы Детальная информация по сервисам и их моделям по ссылкам. * [AuthService](/docs/backend/services/auth.md) - аутентификация и авторизация (телефон, SMS/flash-call, выдача токена, управление сессией). * [ProfilesService](/docs/backend/services/profiles.md) - управление пользователями, профили, доступы, телефоны, email. * [DirectoryService](/docs/backend/services/directory.md) - справочники: категории, бренды, товары, фильтрация и сортировка, синхронизация. * [FilesDirectoryService](/docs/backend/services/profiles.md) - хранение и управление файлами/медиа: загрузка, резервирование токенов, проверка существования. * [SearchService](/docs/backend/services/search.md) - индексация и поиск: работа с синонимами, опечатками, выдача релевантных товаров. * [BusinessService](/docs/backend/services/business.md) - корзина, заказы: создание, отмена, обновления, статусы, взаимодействие с мастер-системой. * [Connector1CService](/docs/backend/services/connector1C.md) - интеграция с 1С: каталоги, остатки, цены, заказы, клиенты, синхронизация. * [FavoriteService](/docs/backend/services/favorite.md) - избранное: добавление/удаление товаров, выборка избранных позиций. * [HeadHuntService](/docs/backend/services/headhunt.md) - вакансии: публикация, редактирование, архивирование офферов, отклики и их обработка. * [ReviewsService](/docs/backend/services/reviews.md) - отзывы и вопросы: постинг, модерация, лайки/дизлайки, отчёты по товарам. * [ArticlesService](/docs/backend/services/articles.md) - публикация статей: создание, обновление, архивирование, публикация, выборка. * [SupportService](/docs/backend/services/support.md) - техподдержка: создание обращений, закрытие, выборка запросов. * [DeliveryService](/docs/backend/services/delivery.md) - тарифы и информация по доставке, расчёт стоимости и сроков. * **LoyaltyService** - промо-кампании, промокоды, скидки на заказы, обработка подтверждений (не запущен). ## Общая схема архитектуры ``` |-> [Profiles] |-> [Auth] |-> [FilesDirectory] |-> [Search] |-> [Directory] |-> [Favorites] |-> [HeadHunt] |-> [Loyalty] |-> [Business] |-> [Reviews] |-> [Articles] |-> [Support] |-> [Delivery] |-> [Connector1C] | [PlatformAPI_0](МС_0, М_1, ...) + [PlatformAPI_N](МС_N+1, М_N+2, ...) _____________________________________________________________________ ^ v [1C] <-> [nginx] <-> [Внешние сервисы] ^ / \ v v [Shop PWA] [Admin PWA] ``` [Назад](/index.md)