chore: восстановление репозитория из снапшота v0.3.1

Прежняя git-история утрачена при переносе проекта на машину владельца
(снапшот без .git). Хэши коммитов в docs/reports/* относятся к утраченной
истории.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
sab.code.lab 2026-08-07 09:34:02 +02:00
commit 1c85091186
184 changed files with 33303 additions and 0 deletions

38
server/README.md Normal file
View file

@ -0,0 +1,38 @@
# 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).