Бэкэнд
Бэкэнд представлен набором микросервисов и агрегатором 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.
Технические требования
Назад