index.md 9.3 KB

Бэкэнд

Бэкэнд представлен набором микросервисов и агрегатором 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 - аутентификация и авторизация (телефон, SMS/flash-call, выдача токена, управление сессией).
  • ProfilesService - управление пользователями, профили, доступы, телефоны, email.
  • DirectoryService - справочники: категории, бренды, товары, фильтрация и сортировка, синхронизация.
  • FilesDirectoryService - хранение и управление файлами/медиа: загрузка, резервирование токенов, проверка существования.
  • SearchService - индексация и поиск: работа с синонимами, опечатками, выдача релевантных товаров.
  • BusinessService - корзина, заказы: создание, отмена, обновления, статусы, взаимодействие с мастер-системой.
  • Connector1CService - интеграция с 1С: каталоги, остатки, цены, заказы, клиенты, синхронизация.
  • FavoriteService - избранное: добавление/удаление товаров, выборка избранных позиций.
  • HeadHuntService - вакансии: публикация, редактирование, архивирование офферов, отклики и их обработка.
  • ReviewsService - отзывы и вопросы: постинг, модерация, лайки/дизлайки, отчёты по товарам.
  • ArticlesService - публикация статей: создание, обновление, архивирование, публикация, выборка.
  • SupportService - техподдержка: создание обращений, закрытие, выборка запросов.
  • DeliveryService - тарифы и информация по доставке, расчёт стоимости и сроков.
  • 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 канал связи
      • увеличивать по мере роста нагрузки

Назад