클로드 코드 초기화
This commit is contained in:
@@ -0,0 +1,97 @@
|
|||||||
|
# CLAUDE.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||||
|
|
||||||
|
## Project Overview
|
||||||
|
|
||||||
|
ChocoMae (초코마에) is a Korean/English typing and mouse practice web application. It features gamified typing exercises (using Phaser 2.6.2), classroom management for teachers (Maestros), and a ranking/record system.
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
- **Frontend:** HTML5, JavaScript (ES5), jQuery 3.3.1, Phaser 2.6.2 game engine, Bootstrap
|
||||||
|
- **Backend:** PHP 7.x with MySQLi, Python (batch scripts)
|
||||||
|
- **Database:** MariaDB/MySQL (`chocomae` database)
|
||||||
|
- **Server:** Apache HTTP Server with SSL on AWS EC2 (Docker container)
|
||||||
|
|
||||||
|
## Development Commands
|
||||||
|
|
||||||
|
This project has **no Node.js/npm build step** for the main application. It runs directly on Apache + PHP.
|
||||||
|
|
||||||
|
**Phaser input plugin** (only if modifying `/src/util/phaser-input-master/`):
|
||||||
|
```sh
|
||||||
|
cd src/util/phaser-input-master
|
||||||
|
npm install # install grunt + TypeScript deps
|
||||||
|
grunt # build TypeScript → JS
|
||||||
|
```
|
||||||
|
|
||||||
|
**Database setup** (initialize schema):
|
||||||
|
```sh
|
||||||
|
mysql -u <user> -p chocomae < src/web/sql/make_db.sql
|
||||||
|
mysql -u <user> -p chocomae < src/web/sql/make_db_license_timer.sql
|
||||||
|
mysql -u <user> -p chocomae < src/web/sql/insert_app.sql
|
||||||
|
mysql -u <user> -p chocomae < src/web/sql/insert_active_app.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
**Deployment** — push to `release` branch; the git post-receive hook automatically:
|
||||||
|
1. Checks out files to `/volume1/docker/chocomae/html/mouse_typing/`
|
||||||
|
2. Copies `NA_service_db_setting.php` → `service_db_setting.php` and replaces `localhost` with `mysql` (Docker hostname)
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
### Directory Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
src/
|
||||||
|
├── game/ # Phaser game modules (client-side JS)
|
||||||
|
├── web/
|
||||||
|
│ ├── main/ # Entry point (index.html) + top-level HTML pages
|
||||||
|
│ ├── module/ # HTML fragments loaded dynamically via jQuery .load()
|
||||||
|
│ ├── js/ # Frontend JavaScript
|
||||||
|
│ ├── css/ # Stylesheets
|
||||||
|
│ ├── server/ # PHP backend endpoints
|
||||||
|
│ ├── admin/ # Admin panel HTML
|
||||||
|
│ ├── popup/ # Popup/modal HTML
|
||||||
|
│ └── sql/ # Database schema and seed files
|
||||||
|
├── php-cli/ # PHP batch scripts (run via cron)
|
||||||
|
└── util/ # Third-party utilities (phaser-input plugin source)
|
||||||
|
resources/ # Static assets: Bootstrap, jQuery, fonts, images
|
||||||
|
test/ # Manual test HTML/JS files (no automated test runner)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Frontend Architecture
|
||||||
|
|
||||||
|
- **Entry point:** `src/web/main/index.html` — loads header/section/footer modules dynamically
|
||||||
|
- **Module loading:** jQuery `.load()` fetches HTML fragments from `src/web/module/`
|
||||||
|
- **State:** `sessionStorage` used for `maestroID` and game session data
|
||||||
|
- **Game engine:** All interactive games live in `src/game/` and use Phaser 2.6.2; each game directory has its own `main.js` with Phaser states (Boot, Load, Game, Result)
|
||||||
|
|
||||||
|
### Backend Architecture
|
||||||
|
|
||||||
|
PHP endpoints in `src/web/server/` are organized by domain:
|
||||||
|
- `player/` — CRUD for player accounts
|
||||||
|
- `record/` — Save/retrieve game results and rankings
|
||||||
|
- `maestro/` — Teacher classroom management (17 endpoints)
|
||||||
|
- `admin/` — Admin operations (11 endpoints)
|
||||||
|
- `license_timer/` — Subscription/license management
|
||||||
|
- `mail/` — Email sending via PHPMailer + Gmail SMTP
|
||||||
|
- `lib/` — Shared PHP libraries (`send_reply_json.php`, `db_maestro.php`, etc.)
|
||||||
|
- `setup/connect_db.php` — Database connection; reads from `service_db_setting.php`
|
||||||
|
|
||||||
|
All endpoints return JSON. UTF-8 encoding is set on all responses.
|
||||||
|
|
||||||
|
### Database Configuration
|
||||||
|
|
||||||
|
- **Development:** Edit `src/web/server/setup/NA_service_db_setting.php` (this is the template; `service_db_setting.php` is git-ignored and generated at deploy time)
|
||||||
|
- The deploy hook replaces `localhost` → `mysql` for Docker networking
|
||||||
|
|
||||||
|
### User Roles
|
||||||
|
|
||||||
|
| Role | Description |
|
||||||
|
|------|-------------|
|
||||||
|
| Player | End users (free or paid) who play games |
|
||||||
|
| Maestro | Teachers who manage groups of student players |
|
||||||
|
| Admin | System administrators with full access |
|
||||||
|
|
||||||
|
### Python Batch Scripts
|
||||||
|
|
||||||
|
Located in `src/web/server/python/chocomae/` and `src/php-cli/batch/` — handle scheduled tasks like sending expiration warning emails to unpaid/expiring Maestros. These are run via cron on the server.
|
||||||
Reference in New Issue
Block a user