new api endpoint and api rate limit
This commit is contained in:
54
.github/copilot-instructions.md
vendored
54
.github/copilot-instructions.md
vendored
@@ -4,60 +4,68 @@
|
||||
## Архитектура и основные компоненты
|
||||
- **Монорепозиторий**: две части — `backend` (Express, TypeScript, Prisma) и `frontend` (React, Vite, TypeScript).
|
||||
- **Backend**:
|
||||
- Точка входа: `backend/src/index.ts` (Express, маршруты `/api/*`, CORS, логирование).
|
||||
- Модули: `backend/src/modules/*` — домены (auth, ticket, check, os, server, tariff), каждый экспортирует маршруты и сервисы.
|
||||
- Интеграция с Proxmox: через API, см. `backend/src/modules/server/proxmoxApi.ts` (создание/управление контейнерами, смена пароля root, статистика).
|
||||
- Точка входа: `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`, `useAuth.ts` (контекст, хуки).
|
||||
- Авторизация: `frontend/src/context/authcontext.tsx` (контекст, хуки).
|
||||
- Дашборд: `frontend/src/pages/dashboard/mainpage.tsx` — реализует сайдбар, вкладки, загрузку данных пользователя, обработку токена, обновление данных через кастомное событие `userDataUpdate`.
|
||||
- Локализация: поддержка ru/en через `useTranslation` и `LocaleProvider`.
|
||||
|
||||
## Ключевые паттерны и конвенции
|
||||
- **API**: все маршруты backend — с префиксом `/api/`.
|
||||
- **Модули backend**: каждый домен — отдельная папка, экспортирует маршруты и сервисы (см. пример: `server/proxmoxApi.ts`).
|
||||
- **Работа с Proxmox**: все операции через функции из `proxmoxApi.ts`, параметры берутся из `.env`.
|
||||
- **Статусные поля**: для Server, Check, Ticket — строковые статусы (`creating`, `running`, `pending`, `open` и др.).
|
||||
- **Пароли**: генерируются через `generateSecurePassword` (см. `proxmoxApi.ts`).
|
||||
- **Описание тарифа**: парсится для выделения ресурсов (ядра, RAM, SSD) при создании контейнера.
|
||||
- **Модули backend**: каждый домен — отдельная папка, экспортирует маршруты и сервисы.
|
||||
- **Работа с MinIO**: все операции S3 через MinIO SDK, параметры берутся из `.env`.
|
||||
- **Статусные поля**: для Check, Ticket, Post, StorageBucket — строковые статусы (`pending`, `approved`, `open`, `published`, `active` и др.).
|
||||
- **Пароли**: генерируются через `generateSecurePassword` (для консольных учётных данных S3).
|
||||
- **Описание тарифа**: для StoragePlan — цена за GB, трафик, операции.
|
||||
- **Frontend**: авторизация через контекст, проверка токена, автоматический logout при ошибке 401.
|
||||
- **Дашборд**: вкладки и права оператора определяются по полю `operator` в userData, обновление данных через событие `userDataUpdate`.
|
||||
- **Дашборд**: вкладки и права оператора/админа определяются по полям `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` — сборка.
|
||||
- `npm run build` — сборка TypeScript + Vite.
|
||||
- `npm run preview` — предпросмотр production-сборки.
|
||||
- `npm run lint` — проверка ESLint.
|
||||
|
||||
## Интеграции и взаимодействие
|
||||
- **Frontend ↔ Backend**: через REST API (`/api/*`), авторизация через JWT-токен в localStorage.
|
||||
- **Backend ↔ Proxmox**: через HTTP API, параметры из `.env`.
|
||||
- **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.
|
||||
- **Frontend**: react, react-dom, react-router-dom, tailwindcss, axios.
|
||||
- **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` — точка входа, маршрутизация.
|
||||
- `backend/src/modules/server/proxmoxApi.ts` — интеграция с Proxmox.
|
||||
- `backend/prisma/schema.prisma` — схема данных.
|
||||
- `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` — авторизация.
|
||||
- `frontend/src/context/authcontext.tsx` — авторизация, JWT, logout.
|
||||
|
||||
## Особенности и conventions
|
||||
- **CORS**: разрешены только локальные адреса для разработки.
|
||||
- **Логирование**: каждый запрос логируется с датой и методом.
|
||||
- **CORS**: разрешены origins из `.env` (PUBLIC_APP_ORIGIN, etc.).
|
||||
- **Логирование**: каждый запрос логируется с датой и методом через `logger`.
|
||||
- **Статические файлы**: чеки доступны по `/uploads/checks`.
|
||||
- **Пароли root**: генерируются и меняются через API Proxmox.
|
||||
- **Frontend**: сайдбар и вкладки строятся динамически, права оператора определяются по userData.
|
||||
- **Пароли для S3 консоли**: генерируются еженедельно, хэшируются.
|
||||
- **Frontend**: сайдбар и вкладки строятся динамически, права по userData, локализация через `useTranslation`.
|
||||
- **Блог**: Rich Text через Quill, статусы `draft`, `published`, `archived`.
|
||||
- **Тикеты**: автоназначение операторам, внутренние комментарии.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user