# คลังทีม + บริหารโปรเจกต์ (library receiver + project admin)

PHP 7.4+ กับ SQLite (php-sqlite3) ไม่ต้องมี MySQL วางโฟลเดอร์นี้ไว้ใต้เว็บ เช่น `/var/www/html/library/`

## ติดตั้ง
1. `config.php` (ไม่ถูกเสิร์ฟ)
   ```php
   <?php
   define('LIBRARY_DATA', '/var/lib/godmode-library');       // นอก web root
   $LIBRARY_ALLOWED_IPS = array('1.2.3.4', '5.6.7.0/24');   // IP ออฟฟิศ/พนักงาน; ว่าง = ทุก IP
   ```
   `mkdir -p /var/lib/godmode-library/blobs && chown -R www-data:www-data /var/lib/godmode-library`
2. สร้าง admin คนแรก: `sudo -u www-data php install.php <ชื่อ> <รหัสผ่าน>`
3. php.ini: `upload_max_filesize` / `post_max_size` ≥ โมเดลใหญ่สุด (เช่น 512M), `max_execution_time` 300
4. เปิด `https://<host>/library/admin/` → สร้างคน (หน้า "คน") → สร้างโปรเจกต์ → ให้สิทธิ์รายคน → เพิ่มงานปั้นและมอบให้คน

## เครื่องพนักงาน
`%USERPROFILE%\.godmode\sync.cfg`
```
url=https://<host>/library/
user=<ชื่อที่ admin สร้าง>
password=<รหัสผ่านของเขา>
project=<โปรเจกต์หลัก>      # ไม่บังคับ wizard มีให้เลือกจากที่ได้สิทธิ์
name=<ชื่อเครื่อง>
```
และวาง `library.key` (กุญแจทีม) ไว้โฟลเดอร์เดียวกัน

## สิ่งที่เซิร์ฟเวอร์เก็บ
- `data/blobs/*.gml` ก้อนเข้ารหัส (ไม่มีกุญแจบนเซิร์ฟเวอร์ หลุดทั้งเครื่องก็อ่านโมเดลไม่ได้)
- `data/library.db` (SQLite): คน / โปรเจกต์ / สิทธิ์ / asset (ใครนำเข้า จากเครื่องไหน เมื่อไร โปรเจกต์ไหน) / งานปั้น (planned → wip → done + asset ที่ได้) / log

## API ที่เอนจิ้นเรียก (HTTP Basic = ชื่อ:รหัสผ่านของพนักงาน)
- `upload.php` POST id, meta, project, task, blob → `ok <id>` (ต้องเป็นสมาชิกโปรเจกต์; task > 0 = งานนั้นเสร็จ)
- `me.php` → `user`, `project`, `task` บรรทัดละรายการ
- `task.php` POST id, status (planned|wip)
- `list.php?project=` / `get.php?id=` (ดึงลง — รอบถัดไป)

ทดสอบ: `curl -u somchai:xxx -H "X-Library-Machine: pc1" -F id=lib.props.test -F project=horror004 -F task=0 -F meta="lib.props.test | test | props | 0 | model | prop_static | | | 1 1 1 | 0" -F blob=@x.gml https://<host>/library/upload.php`
