134 lines
No EOL
4 KiB
Markdown
134 lines
No EOL
4 KiB
Markdown
# 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 |