go-learn/server/README.md
sab.code.lab 1c85091186 chore: восстановление репозитория из снапшота v0.3.1
Прежняя git-история утрачена при переносе проекта на машину владельца
(снапшот без .git). Хэши коммитов в docs/reports/* относятся к утраченной
истории.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-07 09:34:02 +02:00

38 lines
2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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).