Прежняя git-история утрачена при переносе проекта на машину владельца (снапшот без .git). Хэши коммитов в docs/reports/* относятся к утраченной истории. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
38 lines
2 KiB
Markdown
38 lines
2 KiB
Markdown
# server/ — PHP API личного кабинета (этап 8)
|
||
|
||
Без фреймворка, синтаксис ≥ PHP 8.0. Контракт: `docs/INTERFACES.md`,
|
||
раздел «Личный кабинет и синхронизация прогресса (этап 8)», ADR-0004.
|
||
|
||
## Структура
|
||
|
||
- `api/` — эндпоинты: `register`, `login`, `logout`, `me`, `progress`,
|
||
`health` (на хостинге — `/api/*.php`).
|
||
- `lib/` — общий код: `db.php` (PDO + init-миграция), `http.php`
|
||
(заголовки/JSON/лимит тела), `auth.php` (сессии), `ratelimit.php`.
|
||
- `config.example.php` — пример конфига. Скопировать в `config.php`
|
||
(не коммитится, см. корневой `.gitignore`), указать путь к БД
|
||
**вне web root**. Env `GOLEARN_DB` имеет приоритет (нужно smoke-тесту).
|
||
- `tests/smoke.sh` — смоук-тест по контракту.
|
||
|
||
## Локальный запуск smoke-теста
|
||
|
||
Нужны PHP ≥ 8.0 с pdo_sqlite и curl:
|
||
|
||
```sh
|
||
PHP=/path/to/php sh server/tests/smoke.sh
|
||
```
|
||
|
||
(по умолчанию используется `/tmp/php-run`; можно просто
|
||
`sh server/tests/smoke.sh`, если `/tmp/php-run` существует, или задать
|
||
`PHP=$(command -v php)`).
|
||
|
||
Скрипт поднимает `php -S 127.0.0.1:8099 -t server/` с временной БД в
|
||
/tmp (через `GOLEARN_DB`), гонит curl-сценарий из контракта
|
||
(register/login/me/progress/413/429/logout) и удаляет временные файлы.
|
||
Код выхода ненулевой при любом фейле.
|
||
|
||
## Деплой (кратко)
|
||
|
||
`server/` → `/api` на хостинге, `config.php` — рядом, файл БД — вне
|
||
web root, права на запись в каталог БД у PHP. Smoke на хостинге =
|
||
зелёный `GET /api/health.php`. Подробности — `docs/deploy.md` (V.2).
|