6.0 KiB
6.0 KiB
Copilot Instructions for Ospabhost 8.1
Архитектура и основные компоненты
- Монорепозиторий: две части —
backend(Express, TypeScript, Prisma) иfrontend(React, Vite, TypeScript). - Backend:
- Точка входа:
backend/src/index.ts(Express, маршруты/api/*, CORS, логирование, WebSocket). - Модули:
backend/src/modules/*— домены (auth, admin, ticket, check, blog, notification, user, session, qr-auth, storage, payment, account, sitemap), каждый экспортирует маршруты и сервисы. - Интеграция с MinIO: для S3-совместимого хранилища, параметры из
.env. - ORM: Prisma, схема —
backend/prisma/schema.prisma, миграции и seed-скрипты — вbackend/prisma/. - Статические файлы чеков:
backend/uploads/checks(доступны по/uploads/checks).
- Точка входа:
- Frontend:
- SPA на React + Vite, точка входа:
frontend/src/main.tsx. - Страницы:
frontend/src/pages/*, компоненты:frontend/src/components/*. - Авторизация:
frontend/src/context/authcontext.tsx(контекст, хуки). - Дашборд:
frontend/src/pages/dashboard/mainpage.tsx— реализует сайдбар, вкладки, загрузку данных пользователя, обработку токена, обновление данных через кастомное событиеuserDataUpdate. - Локализация: поддержка ru/en через
useTranslationиLocaleProvider.
- SPA на React + Vite, точка входа:
Ключевые паттерны и конвенции
- API: все маршруты backend — с префиксом
/api/. - Модули backend: каждый домен — отдельная папка, экспортирует маршруты и сервисы.
- Работа с MinIO: все операции S3 через MinIO SDK, параметры берутся из
.env. - Статусные поля: для Check, Ticket, Post, StorageBucket — строковые статусы (
pending,approved,open,published,activeи др.). - Пароли: генерируются через
generateSecurePassword(для консольных учётных данных S3). - Описание тарифа: для StoragePlan — цена за GB, трафик, операции.
- Frontend: авторизация через контекст, проверка токена, автоматический logout при ошибке 401.
- Дашборд: вкладки и права оператора/админа определяются по полям
operatorиisAdminв userData, обновление данных через событиеuserDataUpdate. - Уведомления: email и push через web-push, шаблоны в
notification/email.service.ts. - QR-аутентификация: временные коды с TTL 60 сек, статусы
pending,confirmed,expired.
Сборка, запуск и workflow
- Backend:
npm run dev— запуск с hot-reload (ts-node-dev).npm run build— компиляция TypeScript.npm start— запуск собранного кода.- PM2:
npm run pm2:start,pm2:restart, etc. для production.
- Frontend:
npm run dev— запуск Vite dev server.npm run build— сборка TypeScript + Vite.npm run preview— предпросмотр production-сборки.npm run lint— проверка ESLint.
Интеграции и взаимодействие
- Frontend ↔ Backend: через REST API (
/api/*), авторизация через JWT-токен в localStorage, WebSocket для real-time обновлений. - Backend ↔ MinIO: для S3 хранилища, параметры из
.env. - OAuth: поддержка Google, GitHub, VK, Yandex через Passport.js.
- Push-уведомления: через web-push API, подписки в PushSubscription.
- Prisma: миграции и seed-скрипты — в
backend/prisma/.
Внешние зависимости
- Backend: express, prisma, axios, bcrypt, jsonwebtoken, multer, dotenv, minio, web-push, passport, ws.
- Frontend: react, react-dom, react-router-dom, tailwindcss, axios, quill, recharts, xterm.
Примеры ключевых файлов
backend/src/index.ts— точка входа, маршрутизация, WebSocket.backend/src/modules/storage/storage.service.ts— интеграция с MinIO.backend/prisma/schema.prisma— схема данных (User, StorageBucket, Ticket, etc.).frontend/src/pages/dashboard/mainpage.tsx— дашборд, обработка токена, сайдбар, вкладки.frontend/src/context/authcontext.tsx— авторизация, JWT, logout.
Особенности и conventions
- CORS: разрешены origins из
.env(PUBLIC_APP_ORIGIN, etc.). - Логирование: каждый запрос логируется с датой и методом через
logger. - Статические файлы: чеки доступны по
/uploads/checks. - Пароли для S3 консоли: генерируются еженедельно, хэшируются.
- Frontend: сайдбар и вкладки строятся динамически, права по userData, локализация через
useTranslation. - Блог: Rich Text через Quill, статусы
draft,published,archived. - Тикеты: автоназначение операторам, внутренние комментарии.
Обновляйте этот файл при изменении архитектуры, workflow или паттернов. Для уточнения разделов — дайте обратную связь!