# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

**FastAdmin 1.6.x** admin panel built on **ThinkPHP 5.x** (forked from gitee.com/fastadminnet/framework.git). The project is a Macau lottery (澳门六合彩) data tracking application named "amlhc".

- PHP >= 7.4.0, Apache-2.0 license
- Database: MySQL with `fa_` table prefix, utf8mb4 charset
- Frontend: RequireJS + Bootstrap 3.4 + AdminLTE skin

## Key Directories

| Path | Purpose |
|---|---|
| `application/admin/` | Admin backend — controllers, models, views, validates, lang |
| `application/index/` | Public-facing frontend |
| `application/api/` | REST API endpoints |
| `application/common/` | Shared base controllers, models, libraries, global helpers |
| `application/extra/` | Extra config: site.php, upload.php, queue.php, addons.php |
| `public/` | Web root — entry point `index.php`, static assets in `assets/` |
| `addons/` | Plugin directory (currently `command` addon installed) |
| `sql/` | SQL migration/DDL files |
| `thinkphp/` | Vendored ThinkPHP 5.x framework |

## Config Loading Chain

All files under `application/` are merged by ThinkPHP:
1. `config.php` — main config (debug, modules, URL, template, session, cookie, FastAdmin settings)
2. `database.php` — DB connection (reads from `.env`)
3. `extra/*.php` — site, upload, queue, addons config
4. `route.php` — URL routing (currently empty)

Environment variables are loaded from `.env` via `think\Env`.

## Admin Module Architecture

All admin controllers extend `app\common\controller\Backend`, which provides:
- RBAC auth via `app\admin\library\Auth` (salt double-MD5, session + cookie)
- CRUD base operations (index/add/edit/del/multi) via `app\admin\library\traits\Backend`
- Search/filtering, SelectPage, import/export
- Layout templating via `application/admin/view/layout/default.html`

**Standard controller pattern:** Each admin controller maps to a model + view directory + validate + lang file:
```
controller/X.php  →  model/X.php  →  view/x/  →  validate/X.php  →  lang/zh-cn/x.php
```

## Custom Domain Code (Lottery)

| File | Purpose |
|---|---|
| `application/admin/controller/History.php` | Lottery history admin |
| `application/admin/model/History.php` | `fa_history` model |
| `application/admin/controller/Num.php` | `fa_num` color mapping API (`getColorMap`) |
| `application/admin/model/Num.php` | `fa_num` model |
| `application/index/controller/Index.php` | Scrapes lottery data from external API |

## Frontend Build System

**Grunt** (`Gruntfile.js`) is the build tool:
- `grunt deploy` — copy npm packages to `public/assets/libs/`
- `grunt backend:js` / `grunt frontend:js` — RequireJS optimizer for JS
- `grunt backend:css` / `grunt frontend:css` — Less → CSS compilation

JS uses RequireJS with separate entry points: `require-backend.js` and `require-frontend.js`.

## Common Development Commands

### Install dependencies
```bash
composer install
npm install
grunt deploy        # copy npm deps to public/assets/libs/
grunt               # build all JS/CSS
```

### Run dev server
```bash
php -S 127.0.0.1:8000 -t public public/router.php
```

### Generate CRUD scaffolding (built-in)
```bash
php think crud --table=fa_xxx --controller=xxx --model=xxx
```

### Generate menu for admin controller
```bash
php think menu --controller=xxx/xxx
```

### Run tests
```bash
php think unit
```

## Important Notes

- Admin entry is `public/index.php` (the admin module is accessed via URL routing, not a separate `admin.php`)
- All database queries use ThinkPHP's query builder (`Db::name('table')`) or models
- Language files use key-value pairs; keys are English labels (e.g., `'Num1' => '号码1'`)
- The `.env` file contains actual credentials — never commit it
- Runtime cache lives in `runtime/` — clear it when config changes don't take effect

