Проект использует:
- PHP 8.5+
- RoadRunner HTTP worker
- PostgreSQL
- Redis через RoadRunner KV
- PHPUnit
- PHPStan
- PHP-CS-Fixer
Файл .rr.yaml определяет:
- запуск worker через
php public/index.php; - HTTP listener на
:8080; - RPC listener на
127.0.0.1:6001; - metrics/status endpoints;
- KV storage (
local-memory,redis).
Основная конфигурация лежит в config/storage.php.
По умолчанию используется:
pgsqlкак основной runtime adaptersqliteкак лёгкий adapter для отдельных изолированных сценариев и тестов
Базовый quality gate шаблона не должен требовать поднятые внешние сервисы, но сам backend по умолчанию ориентирован на PostgreSQL.
Используется как backend для RoadRunner KV.
Конфиг:
.rr.yamlconfig/cache.php
Для deployment-aware cache invalidation используется namespace_seed в config/cache.php или CACHE_NAMESPACE_SEED из окружения.
Это позволяет менять namespace кеша между релизами без глобального clear() shared backend-а на старте воркеров.
docker-compose.yml поднимает:
db-postgresдля основного PostgreSQL runtime profileredis
Стандартный lifecycle:
task services:start
task services:stopservices:start также ждёт готовности БД и запускает миграции.
Назначение:
- хранение анонимных и пользовательских сессий;
- session payload в JSON-compatible field;
- индексы под поиск по
user_id,expires_at,payload->>'ip',payload->>'fingerprint'.
Назначение:
- запись вызовов API с привязкой к session;
- хранение route, method, status code, execution time, request timestamp.
Сейчас это минимальная таблица для будущих auth/user сценариев.
Запуск:
task migrateCLI wrapper:
bin/migrate.php
Реализация миграций:
src/Platform/Storage/Migration/*
Покрывают:
- domain services;
- middleware;
- router;
- DI container;
- hydrator;
- repositories;
- route generation.
Bootstrap:
vendor/autoload.php
Свойства:
- не требуют внешнюю БД;
- не требуют RoadRunner KV;
- используются в default
task testиtask verify.
Проверяют:
- реальное приложение через
App::handleRequest(); - PostgreSQL-backed flow;
- session creation/validation/fingerprinting;
- geolocation integration;
- api stats recording.
Bootstrap:
tests/Integration/bootstrap.php
Свойства:
- требуют PostgreSQL profile;
- запускаются отдельным профилем через
task test:integration.
Bootstrap в tests/Integration/bootstrap.php:
- создаёт единый
App; - получает container;
- очищает
publicschema в PostgreSQL integration profile; - заново прогоняет миграции;
- сохраняет shared app в
TestAppFactory.
Следствие:
- интеграционные тесты не мокают runtime;
- tests ближе к реальному application flow;
- состояние базы подготавливается централизованно.
task lint
task phpstan
task test
task sql:check
task sql:check:pg
task test:integration
task test:full
task verify
task verify:integration
task verify:fulltask verify — основной локальный gate. Он запускает:
- lint
- phpstan
- sql artifact consistency check
- unit tests
task verify:integration запускает PostgreSQL-backed SQL validation и integration profile.
task verify:full объединяет оба контура и дополнительно запускает полный quality gate самой sql-gen тулзы.
- Изменения в storage/repository/migrations нужно проверять через
task test:integrationилиtask verify:full. - Изменения в
.protoпочти всегда требуют регенерации артефактов. - Изменения в middleware могут затронуть integration tests, даже если unit tests зелёные.
- Из-за RoadRunner нельзя бездумно использовать растущие static caches и состояние в singleton-like сервисах.
- Любая реструктуризация должна сохранять быстрый автономный
task verify.