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

2 KiB
Raw Permalink Blame History

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:

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