Small fixes
This commit is contained in:
parent
bb03d4bc14
commit
5e74ab8322
6 changed files with 201 additions and 85 deletions
134
backend/CLAUDE.md
Normal file
134
backend/CLAUDE.md
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Common Development Commands
|
||||
|
||||
### Running the Application
|
||||
```bash
|
||||
npm run dev # Development mode with nodemon hot reload
|
||||
npm start # Production mode
|
||||
```
|
||||
|
||||
### Docker Commands
|
||||
```bash
|
||||
# Production deployment
|
||||
docker-compose up -d
|
||||
|
||||
# Development with hot reload
|
||||
docker-compose --profile dev up fizika-admin-dev
|
||||
|
||||
# Build image manually
|
||||
docker build -t fizika-admin ./backend
|
||||
```
|
||||
|
||||
### Environment Setup
|
||||
```bash
|
||||
cp .env.example .env
|
||||
# Edit .env with your configuration
|
||||
```
|
||||
|
||||
## Architecture Overview
|
||||
|
||||
This is a single-file Node.js/Express backend (`server.js`) that serves as both:
|
||||
1. **API Server**: Provides REST endpoints for question and image management
|
||||
2. **Static File Server**: Serves the admin interface from `/public/` directory
|
||||
|
||||
### Key Components
|
||||
|
||||
**Data Storage**:
|
||||
- Questions stored in JSON file at `../frontend/fizika.json` (configurable via `DATA_PATH`)
|
||||
- Images stored in `../frontend/pics/` directory (configurable via `PICS_PATH`)
|
||||
|
||||
**Admin Interface**:
|
||||
- Built-in web UI served from `/public/index.html`
|
||||
- JavaScript client in `/public/admin.js`
|
||||
- No authentication required (simplified for admin use)
|
||||
|
||||
**API Structure**:
|
||||
- Public endpoints: `/api/fizika`, `/api/images`, `/api/pics/:filename`
|
||||
- Admin endpoints: `/api/admin/questions`, `/api/admin/images`
|
||||
- No JWT authentication implemented despite README documentation
|
||||
|
||||
### Question Data Format
|
||||
```json
|
||||
{
|
||||
"id": 1,
|
||||
"source": "2016/m1/1",
|
||||
"description": "Question text...",
|
||||
"a": "Option A",
|
||||
"b": "Option B",
|
||||
"c": "Option C",
|
||||
"d": "Option D",
|
||||
"correct": 2,
|
||||
"type": "md",
|
||||
"image": "optional-image.jpg"
|
||||
}
|
||||
```
|
||||
|
||||
### Complete Question Types (17 Categories)
|
||||
|
||||
**IMPORTANT**: The README only mentions 3 types, but the frontend supports all 17:
|
||||
|
||||
**Mechanics (Mechanika)**:
|
||||
- `mec` - Mechanika (general mechanics)
|
||||
- `mk` - Kinematika (kinematics)
|
||||
- `md` - Dinamika (dynamics)
|
||||
- `me` - Munka és energia (work and energy)
|
||||
- `mf` - Folyadékok és gázok mechanikája (fluid mechanics)
|
||||
- `mr` - Rezgések és hullámok (oscillations and waves)
|
||||
|
||||
**Thermodynamics**:
|
||||
- `h` - Hőtan (thermodynamics)
|
||||
|
||||
**Electricity**:
|
||||
- `ele` - Elektromosság (general electricity)
|
||||
- `es` - Elektrosztatika (electrostatics)
|
||||
- `ee` - Egyenáram (direct current)
|
||||
- `ev` - Váltakozó áram (alternating current)
|
||||
|
||||
**Other Physics**:
|
||||
- `m` - Mágnesesség (magnetism)
|
||||
- `o` - Fénytan (optics)
|
||||
- `atm` - Atomfizika (general atomic physics)
|
||||
- `ah` - Atomhéj (electron shells)
|
||||
- `am` - Atommag (atomic nucleus)
|
||||
- `cs` - Égi mechanika, csillagászat (celestial mechanics, astronomy)
|
||||
- `v` - Vegyes (mixed/various)
|
||||
|
||||
### Security Considerations
|
||||
- Helmet.js for security headers
|
||||
- CORS configuration via `FRONTEND_URL` environment variable
|
||||
- File upload restricted to images only (5MB limit)
|
||||
- Input validation minimal - add validation when modifying endpoints
|
||||
|
||||
## File Structure
|
||||
```
|
||||
backend/
|
||||
├── server.js # Main application file
|
||||
├── public/
|
||||
│ ├── index.html # Admin interface HTML
|
||||
│ └── admin.js # Admin interface JavaScript
|
||||
├── package.json
|
||||
├── Dockerfile
|
||||
├── docker-compose.yml
|
||||
└── .env.example
|
||||
```
|
||||
|
||||
## Important Notes
|
||||
|
||||
- **Single File Architecture**: All server logic is in `server.js` - no separate route files or modules
|
||||
- **File-based Data**: Uses JSON file for persistence, not a database
|
||||
- **No Authentication**: Despite README documentation mentioning JWT, no auth is implemented
|
||||
- **Path Dependencies**: Assumes frontend directory structure (`../frontend/fizika.json`, `../frontend/pics/`)
|
||||
- **Admin UI Included**: Built-in web interface accessible at root path `/`
|
||||
- **Question Types**: Support all 17 physics categories listed above, not just the 3 in README
|
||||
|
||||
## Making Changes
|
||||
|
||||
When modifying the API:
|
||||
1. All changes go in `server.js`
|
||||
2. Test both API endpoints and admin UI functionality
|
||||
3. Ensure question type validation supports all 17 categories if adding validation
|
||||
4. Consider impact on file paths and data format
|
||||
5. Update environment variables in `.env.example` if needed
|
||||
Loading…
Reference in a new issue