Files
web-frontend/docs/tz/technical-architecture.md
2026-05-01 14:41:02 +07:00

8.3 KiB
Raw Blame History

6. Техническая архитектура, стек и состав компонентов

6.1 Общая архитектурная схема

Программный продукт реализуется по клиент-серверной модели и включает веб-клиент, сервер бизнес-логики, базу данных, модуль интеграции и вспомогательные сервисы уведомлений.

6.2 Состав прикладных сервисов

Согласно действующей карте деплоя в составе проекта используются следующие сервисы:

  • web-frontend — клиентский и менеджерский веб-интерфейс
  • apollo-backend — сервер GraphQL и бизнес-логика
  • vault — централизованное хранилище секретов
  • tg-bot — Telegram-контур
  • max-bot — MAX-контур
  • bonus-bot — бонусный мессенджерный контур

Основные прикладные сервисы web-frontend и apollo-backend разворачиваются через dokploy_webhook на сервере main.

6.3 Технологический стек фронтенда

Клиентская часть программного продукта реализуется на следующих технологиях:

  • Nuxt 4 — прикладной веб-фреймворк
  • Vue 3 — библиотека пользовательского интерфейса
  • @nuxtjs/apollo и @vue/apollo-composable — работа с GraphQL
  • GraphQL Code Generator — генерация типизированных GraphQL-документов
  • Tailwind CSS и daisyUI — базовая стилизация интерфейсов
  • Storybook — контур изоляционного просмотра компонентов
  • VitePress — подготовка проектной документации

6.4 Технологический стек серверной части

Серверная часть программного продукта реализуется на следующих технологиях:

  • Node.js — среда выполнения
  • Express 5 — HTTP-сервер
  • Apollo Server 5 — GraphQL-сервер
  • Prisma 7 — доступ к данным и ORM-слой
  • PostgreSQL — основное хранилище данных
  • Zod — валидация структур данных в прикладных сценариях
  • Nodemailer — отправка уведомлений по электронной почте

6.5 Архитектура клиентской части

Клиентская часть организована по следующим слоям:

  • страницы app/pages — входные экранные формы
  • компоненты app/components — переиспользуемые элементы интерфейса
  • composables app/composables — клиентская логика и представление данных
  • GraphQL-документы graphql/operations — отдельные запросы и мутации
  • сгенерированная типизированная схема app/composables/graphql/generated.ts
  • серверные proxy и интеграционные обработчики server/api

Ключевые экранные маршруты текущей реализации:

  • /products и /products/[slug] — каталог и карточка товара
  • /cart — корзина
  • /client-orders и /client-orders/[id] — клиентские заявки и заказы
  • /clients и /clients/[id] — менеджерский контур клиентов
  • /orders и /orders/[id] — менеджерский контур заказов
  • /catalog-settings — административные настройки каталога
  • /bonus-program, /bonus-system/* — бонусный контур

6.6 Карта слоев и компонентов

6.7 Архитектура серверной части

Серверная часть организована по следующим основным модулям:

  • src/server.js — инициализация HTTP-сервера и GraphQL-сервера
  • src/schema.graphql — контракт GraphQL API
  • src/resolvers.js — реализация GraphQL-операций
  • src/context.js — построение контекста запроса
  • src/auth.js — аутентификация и токены доступа
  • src/access.js — правила авторизации и проверки ролей
  • src/prisma-client.js — точка подключения Prisma
  • src/messenger*.js, src/telegram*.js, src/max-mini-app.js — мессенджерный контур и мини-приложения

6.8 Взаимодействие фронтенда и backend

Взаимодействие клиентской и серверной части строится через GraphQL API.

На стороне Nuxt используется серверный proxy-маршрут /api/graphql, который:

  • принимает запросы браузера
  • прокидывает cookie и авторизационные заголовки
  • перенаправляет запрос в apollo-backend
  • возвращает результат в клиентское приложение

Такой подход позволяет:

  • изолировать прямой backend endpoint от браузерного клиента
  • централизованно передавать авторизационные данные
  • поддерживать единый клиентский GraphQL endpoint

6.9 Интеграционные и вспомогательные HTTP-точки

Помимо GraphQL API, во фронтенд-контуре реализованы вспомогательные серверные маршруты:

  • /api/graphql — proxy в backend GraphQL API
  • /api/auth/messenger-start — запуск сценариев messenger login / connect
  • /api/dadata/address — подсказки адресов
  • /api/dadata/bank — подсказки банковских реквизитов
  • /api/dadata/party — подсказки контрагентов
  • /api/messenger-avatar/[connectionId] — выдача изображений, связанных с мессенджерными подключениями

6.10 Компонентные требования к реализации

Архитектура программного продукта должна сохранять следующие правила:

  • экранная логика должна находиться на уровне страниц и composables
  • переиспользуемые элементы интерфейса должны быть вынесены в компоненты
  • каждый GraphQL-документ должен храниться в отдельном .graphql файле
  • клиентский код должен использовать сгенерированные типизированные документы
  • серверная логика доступа к данным должна проходить через Prisma
  • бизнес-правила доступа должны контролироваться серверной частью, а не только интерфейсом

6.11 Требования к конфигурации и секретам

Сервисы программного продукта должны получать прикладные секреты из Vault.

В конфигурации сервисов допускается хранение только bootstrap-параметров для подключения к Vault. Бизнес-секреты, ключи интеграций и иные чувствительные данные должны загружаться из Vault при старте приложения.