# Бэкэнд Бэкэнд представлен набором микросервисов и агрегатором ProfiMall.ServerAPI (PlatformAPI), который открывает внешний доступ к ним через API поддерживая OpenAPI. Микросервисы взаимодействуют между собой на функциональном уровне в пределах одного приложения, если они работают в пределах одного домена (агрегатора). При необходимости (увеличенные нагрузки, нехватка мощностей) отдельные микросервисы можно вынести в отдельный домен на другой физический (или виртуальный) сервер. В этом случае их взаимодействие будет через HTTP API. ## Стек * Проект * C# (.NET 8.0) - язык разработки * Dapper - ORM * AutoMapper - мэппинг * SQLite - СУБД * SixLabors.ImageSharp - работа с изображениями * BStorm - набор инструментов * NetBridge - библиотека обертки программных интерфейсов в HTTP API (OpenAPI v3) * Yandex.Checkout.V3 - библиотека для работы с ЮКассой ## Структура решения - backend - ProfiMall [общее решение, библиотека содержит микросервисы и общий код] - Common [общий код] - *Название_сервиса [папка с кодом сервиса] - ProfiMall.ServerAPI [решение PlatformAPI, приложение объединяющее микросервисы] - conf [глобальные конфигурационные файлы] - Classes - Middlewares - сборка приложения - services - *название сервиса - *название сервиса.db [БД сервиса] - * [различные конфигруационные файлы сервиса] - conf [глобальные конфигурационные файлы] - loggerConfig.json [конфиг логгера] - NBAuthConfig.json [конфиг NetBridge аутентификации] - filestorage [хранилище загруженны файлов сервиса FilesDirectoryService] - *категория [категория файлов] - * [загруженные файлы] - logs - *название сервиса - * [логи сервиса] - *язык (локализации библиотек) ## Код Приложение построено на NetBridge, который позволяет из программного интерфейса получить набор HTTP API эндпойнтов. NB так же контролирует доступ к ресурсам на основе ассинхронного контекста через NBContext -> NBSession (см.код). ### ProfiMall.ServerAPI Выполняемое приложение. Собирает необходимые сервисы в один домен и предоставляет к ним доступ через OpenAPI. * Program.cs - точка входа в приложение. * ProfiMallCore.cs - основное ядро (см.код) Приложение запускает на http://127.0.0.1:5000 HTTP сервер. Доступ к OpenAPI v3 интерфейсу через http://127.0.0.1:5000/swagger/index.html ### ProfiMall Библиотека. * Common - общий набор интерфейсов, классов, исключений, енумов (см. код). * *Микросервисы - отдельные сервисы по папкам. Большинство микросервисов построены по одинаковой структуре. - conf [Папка с конфигами, если они есть] - Enums [енумы] - Models [модели] - Internal [внутренние классы, как модели, объекты доступа к базе, миграции] - *DAL [описание БД] - *DBMigration [миграции] БД (SQLite) используется для долгосрочного хранения данных, к которым не требуется постоянный доступ. Если к данные активно используются, то они кэшируются в словарях. #### Микросервисы Детальная информация по сервисам и их моделям по ссылкам. * [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** - промо-кампании, промокоды, скидки на заказы, обработка подтверждений (не запущен). ## Нотации ### Код * Каждый сервис должен именть интерфейс для возможности работы с NB * Стремимся делать иммутабельные объекты и коллекции. (см. код) ### Документирование * Использование комментариев для документирования. Обязательно на уровне интерфейсов. * Использование простых комментариев в сложных блоках кода. * Использование понятного наименования, которые позволит корректно читать код и его функционал. * Общее описание функционала писать во внешнуюю документацию. ### Версионность Используем Git на https://git.ivanlog.ru/ Репозиторий: https://git.ivanlog.ru/ProfiMall/Backend Запрос доступа у ivanlog. Основная ветка разработки - dev. Каждый разработчик заводит свою ветку по виду dev-имя_разработчика. В ней ведет разработку отдельный фич, после мержит в dev. Основная ветка деплоя - main. ## Технические требования * Для разработки - особых требований нет. * Для деплоя: * ОС: Windows/Ubuntu 22.04 (зависи от настроек сборки) * Если сборка не нативная, то необходимо установить: * dotnet-runtime-8.0 * aspnetcore-runtime-8.0 * Системные требования: * от 2 ядер ЦП * от 4 ГБ ОЗУ * от 40 ГБ SSD * от 100 Мб/c канал связи * увеличивать по мере роста нагрузки [Назад](/index.md)