Рефакторинг: улучшение системы аутентификации и UI компонентов
- Удалены устаревшие файлы (mock.js, old-schedule.txt, loading-overlay.tsx) - Переработана система аутентификации (login, logout, check-auth) - Добавлен компонент toast для уведомлений - Улучшен контекст загрузки (loading-context) - Обновлен парсер расписания (schedule.ts) - Улучшена админ-панель - Обновлена документация (README.md) - Старые файлы перемещены в директорию old/
This commit is contained in:
101
README.md
101
README.md
@@ -1,10 +1,10 @@
|
||||
# Schedule for колледж связи пгути
|
||||
# Schedule for College of Communication Volga State Goverment University of ICT (КС ПГУТИ)
|
||||
|
||||
Reskin of https://lk.ks.psuti.ru/ since it lacks mobile support.
|
||||
|
||||
[](https://kspsuti.ru#gh-dark-mode-only)
|
||||
[](https://schedule.itlxrd.space/)
|
||||
|
||||
[](https://kspsuti.ru#gh-light-mode-only)
|
||||
[](https://schedule.itlxrd.space/)
|
||||
|
||||
[Visit website](https://kspsuti.ru)
|
||||
|
||||
@@ -14,11 +14,12 @@ Reskin of https://lk.ks.psuti.ru/ since it lacks mobile support.
|
||||
- Tailwind CSS
|
||||
- @shadcn/ui components (built with Radix UI)
|
||||
- JSDOM for parsing scraped pages, rehydration strategy for cache
|
||||
- TypeScript 5.6.0 with types for each package
|
||||
- TypeScript 5.9.3 with types for each package
|
||||
- Telegram Bot API (via [node-telegram-bot-api]) for parsing failure notifications
|
||||
- Custom [js parser for teachers' photos](https://gist.github.com/VityaSchel/28f1a360ee7798511765910b39c6086c)
|
||||
- Accessibility & tab navigation support
|
||||
- Dark theme with automatic switching based on system settings
|
||||
- Admin panel for managing groups and settings
|
||||
|
||||
## Known issues
|
||||
|
||||
@@ -26,6 +27,46 @@ Reskin of https://lk.ks.psuti.ru/ since it lacks mobile support.
|
||||
|
||||
Workaround: Locate to next week, then enter previous twice.
|
||||
|
||||
## Project structure
|
||||
|
||||
```
|
||||
kspguti-schedule/
|
||||
├── src/ # Source code
|
||||
│ ├── app/ # App router (Next.js 13+)
|
||||
│ │ ├── agregator/ # Schedule fetching logic
|
||||
│ │ ├── parser/ # HTML parsing for schedule
|
||||
│ │ └── utils/ # App-level utilities
|
||||
│ ├── pages/ # Pages router (Next.js)
|
||||
│ │ ├── api/ # API routes
|
||||
│ │ │ └── admin/ # Admin panel API endpoints
|
||||
│ │ ├── [group].tsx # Dynamic group schedule page
|
||||
│ │ ├── admin.tsx # Admin panel page
|
||||
│ │ └── index.tsx # Home page
|
||||
│ ├── entities/ # Entities
|
||||
│ ├── features/ # Feature modules
|
||||
│ ├── shared/ # Shared code
|
||||
│ │ ├── constants/ # App constants
|
||||
│ │ ├── context/ # React contexts
|
||||
│ │ ├── data/ # Data loaders and JSON files
|
||||
│ │ ├── model/ # Data models
|
||||
│ │ ├── providers/ # React providers
|
||||
│ │ ├── ui/ # Shared UI components
|
||||
│ │ └── utils/ # Utility functions
|
||||
│ ├── shadcn/ # shadcn/ui components
|
||||
│ └── widgets/ # Complex UI widgets
|
||||
├── public/ # Static assets
|
||||
│ └── teachers/ # Teacher photos
|
||||
├── old/ # Deprecated files (see old/README.md)
|
||||
├── scripts/ # Deployment scripts
|
||||
├── systemd/ # Systemd service file
|
||||
├── components.json # shadcn/ui config
|
||||
├── docker-compose.yml # Docker Compose config
|
||||
├── Dockerfile # Docker image definition
|
||||
├── next.config.js # Next.js configuration
|
||||
├── tailwind.config.js # Tailwind CSS config
|
||||
└── tsconfig.json # TypeScript config
|
||||
```
|
||||
|
||||
## Development
|
||||
|
||||
### Prerequisites
|
||||
@@ -41,6 +82,22 @@ npm install
|
||||
|
||||
# Run development server
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### Admin Panel
|
||||
|
||||
The application includes an admin panel for managing groups and application settings. Access it at `/admin` route.
|
||||
|
||||
**Features:**
|
||||
- Manage groups (add, edit, delete)
|
||||
- Configure application settings (e.g., week navigation)
|
||||
- Password-protected access with session management
|
||||
|
||||
**Environment variables for admin panel:**
|
||||
- `ADMIN_PASSWORD` - Password for admin panel access (required)
|
||||
- `ADMIN_SESSION_SECRET` - Secret key for session tokens (optional, defaults to 'change-me-in-production')
|
||||
|
||||
⚠️ **Important:** Always set a strong `ADMIN_PASSWORD` and `ADMIN_SESSION_SECRET` in production!
|
||||
|
||||
### Docker deployment
|
||||
|
||||
@@ -68,9 +125,12 @@ docker-compose down
|
||||
```
|
||||
|
||||
**Environment variables:** Edit `docker-compose.yml` to add your environment variables:
|
||||
- `PROXY_URL` - URL for schedule parsing
|
||||
- `PARSING_FAILURE_NOTIFICATIONS_TELEGRAM_BOTAPI_TOKEN` - Telegram bot token
|
||||
- `PARSING_FAILURE_NOTIFICATIONS_TELEGRAM_CHAT_ID` - Telegram chat ID
|
||||
- `PROXY_URL` - URL for schedule parsing (optional)
|
||||
- `PARSING_FAILURE_NOTIFICATIONS_TELEGRAM_BOTAPI_TOKEN` - Telegram bot token (optional)
|
||||
- `PARSING_FAILURE_NOTIFICATIONS_TELEGRAM_CHAT_ID` - Telegram chat ID (optional)
|
||||
- `ADMIN_PASSWORD` - Password for admin panel access (required for admin features)
|
||||
- `ADMIN_SESSION_SECRET` - Secret key for session tokens (optional, but recommended in production)
|
||||
- `NEXT_PUBLIC_SITE_URL` - Site URL for canonical links and sitemap (optional)
|
||||
|
||||
### Production deployment
|
||||
|
||||
@@ -165,16 +225,6 @@ sudo ./scripts/manage.sh enable
|
||||
sudo ./scripts/manage.sh disable
|
||||
```
|
||||
|
||||
Or use systemctl directly:
|
||||
|
||||
```bash
|
||||
sudo systemctl start kspguti-schedule
|
||||
sudo systemctl stop kspguti-schedule
|
||||
sudo systemctl restart kspguti-schedule
|
||||
sudo systemctl status kspguti-schedule
|
||||
sudo journalctl -u kspguti-schedule -f
|
||||
```
|
||||
|
||||
**Service configuration:**
|
||||
|
||||
- Installation directory: `/opt/kspguti-schedule`
|
||||
@@ -184,10 +234,19 @@ sudo journalctl -u kspguti-schedule -f
|
||||
|
||||
**Environment variables:**
|
||||
|
||||
See `.env.production.example` or `.example.env` for available options. The application uses `.env` file in production:
|
||||
- `PROXY_URL` - URL for schedule parsing (optional)
|
||||
- `PARSING_FAILURE_NOTIFICATIONS_TELEGRAM_BOTAPI_TOKEN` - Telegram bot token (optional)
|
||||
- `PARSING_FAILURE_NOTIFICATIONS_TELEGRAM_CHAT_ID` - Telegram chat ID (optional)
|
||||
See `.env.production.example` for available options. The application uses `.env` file in production:
|
||||
|
||||
**Schedule parsing:**
|
||||
- `PROXY_URL` - URL for schedule parsing (optional, defaults to https://lk.ks.psuti.ru)
|
||||
- `PARSING_FAILURE_NOTIFICATIONS_TELEGRAM_BOTAPI_TOKEN` - Telegram bot token for parsing failure notifications (optional)
|
||||
- `PARSING_FAILURE_NOTIFICATIONS_TELEGRAM_CHAT_ID` - Telegram chat ID for receiving notifications (optional)
|
||||
|
||||
**Admin panel:**
|
||||
- `ADMIN_PASSWORD` - Password for admin panel access (required for admin features)
|
||||
- `ADMIN_SESSION_SECRET` - Secret key for session tokens (optional, defaults to 'change-me-in-production', but should be changed in production)
|
||||
|
||||
**Site configuration:**
|
||||
- `NEXT_PUBLIC_SITE_URL` - Site URL for canonical links and sitemap (optional, defaults to https://schedule.itlxrd.space)
|
||||
|
||||
#### Other platforms
|
||||
|
||||
|
||||
Reference in New Issue
Block a user