Files
ospab.host/.github/copilot-instructions.md
ospab 9bbf88a8f7 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.
2026-01-05 20:11:22 +03:00

38 lines
2.9 KiB
Markdown

# 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`).
## 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`.
## 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`.
## 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`.
## 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.
Reference: `ospabhost/backend/src/index.ts`, `ospabhost/backend/prisma/schema.prisma`, `ospabhost/frontend/src/pages/dashboard/mainpage.tsx`.