feat: Implement dark mode support across the application
- Added ThemeContext to manage theme state and toggle functionality. - Updated components to support dark mode styles, including header, dashboard, and home page. - Enhanced CSS for smooth transitions between light and dark themes. - Modified authentication context to handle async login operations. - Improved user experience by preserving theme preference in local storage. - Refactored login and register pages to handle OAuth tokens and errors more gracefully.
This commit is contained in:
98
.github/copilot-instructions.md
vendored
98
.github/copilot-instructions.md
vendored
@@ -1,72 +1,38 @@
|
||||
# Copilot Instructions for Ospabhost 8.1
|
||||
# Copilot Instructions for Ospabhost
|
||||
|
||||
## Architecture Overview
|
||||
- **Monorepo**: Backend (Express + TypeScript + Prisma) and Frontend (React + Vite + TypeScript).
|
||||
- **Backend Entry**: `ospabhost/backend/src/index.ts` - Express server with CORS, rate limiting, WebSocket, and module routes (`/api/*`).
|
||||
- **Modules**: Organized in `ospabhost/backend/src/modules/*` (auth, storage, ticket, blog, etc.), each exporting routes and services.
|
||||
- **Database**: MySQL via Prisma (`ospabhost/backend/prisma/schema.prisma`), models like User, StorageBucket, Ticket with string statuses (`pending`, `approved`, `active`).
|
||||
- **Frontend Dashboard**: `ospabhost/frontend/src/pages/dashboard/mainpage.tsx` - dynamic sidebar tabs based on user roles (`operator`, `isAdmin`).
|
||||
|
||||
## Архитектура и основные компоненты
|
||||
- **Монорепозиторий**: две части — `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`.
|
||||
## Key Patterns & Conventions
|
||||
- **API Routes**: All backend routes prefixed with `/api/`, authenticated via JWT in localStorage.
|
||||
- **Status Fields**: Use string enums (e.g., Check: `pending`/`approved`/`rejected`; Ticket: `open`/`in_progress`/`resolved`).
|
||||
- **MinIO Integration**: S3-compatible storage via MinIO SDK, configs from `.env`, buckets per user with quotas.
|
||||
- **Localization**: ru/en support via `useTranslation` hook, URLs like `/en/dashboard`.
|
||||
- **WebSocket**: Real-time updates via `/ws`, initialized in `ospabhost/backend/src/websocket/server.ts`.
|
||||
- **Security**: Rate limiting (1000 req/15min global, 10 req/15min auth), CORS from `PUBLIC_APP_ORIGIN`, helmet middleware.
|
||||
- **Static Files**: Check uploads in `ospabhost/backend/uploads/checks`, served at `/uploads/checks`.
|
||||
- **Notifications**: Email/push via `web-push`, templates in `ospabhost/backend/src/modules/notification/email.service.ts`.
|
||||
|
||||
## Ключевые паттерны и конвенции
|
||||
- **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`.
|
||||
## Development Workflows
|
||||
- **Backend**: `npm run dev` (ts-node-dev hot-reload), `npm run build` (TypeScript), PM2 for production (`npm run pm2:start`).
|
||||
- **Frontend**: `npm run dev` (Vite), `npm run build`, `npm run preview`.
|
||||
- **Database**: Prisma migrations in `ospabhost/backend/prisma/migrations/`, seed scripts for plans/promocodes.
|
||||
- **OAuth**: Google/GitHub/VK/Yandex via Passport.js, configs in `ospabhost/backend/src/modules/auth/passport.config.ts`.
|
||||
- **Blog**: Rich text via Quill, statuses `draft`/`published`/`archived`.
|
||||
|
||||
## Сборка, запуск и 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.
|
||||
## Integration Points
|
||||
- **Frontend ↔ Backend**: Axios API client, JWT auth, WebSocket for real-time.
|
||||
- **MinIO**: All S3 ops through `storage.service.ts`, console credentials generated weekly.
|
||||
- **Push Notifications**: Web Push API, subscriptions in PushSubscription model.
|
||||
- **QR Auth**: Temporary codes (60s TTL), statuses `pending`/`confirmed`/`expired`.
|
||||
|
||||
## Интеграции и взаимодействие
|
||||
- **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/`.
|
||||
## Examples
|
||||
- Add new module: Create `ospabhost/backend/src/modules/newmodule/` with `routes.ts` and `service.ts`, import in `index.ts`.
|
||||
- Update user data: Dispatch `userDataUpdate` event to refresh dashboard.
|
||||
- Storage bucket: Create via `StorageBucket` model, link to `StoragePlan` for pricing.
|
||||
|
||||
## Внешние зависимости
|
||||
- **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 или паттернов. Для уточнения разделов — дайте обратную связь!_
|
||||
Reference: `ospabhost/backend/src/index.ts`, `ospabhost/backend/prisma/schema.prisma`, `ospabhost/frontend/src/pages/dashboard/mainpage.tsx`.
|
||||
Reference in New Issue
Block a user