Bicycle/.claude/memory/roadmap.md
Egor Isaev 9d4edf147a dev
2026-08-07 11:40:03 +03:00

4.8 KiB
Raw Blame History

name description metadata
roadmap Статус слоя БД (MariaDB/Mongo/Elasticsearch) в Bicycle — что реализовано, что ждёт внешней инфраструктуры
type
project

Реализовано (2026-08-07) — три независимых сервиса, каждый со своей фабрикой в духе Services\Auth, без общего интерфейса поверх всех трёх (SQL/документы/поиск — слишком разные модели, чтобы прятать за одной абстракцией). Подробности использования — CLAUDE.md → разделы DataBase/Elasticsearch/Mongo.

  • Реляционная БД (MariaDB, полностью рабочая и протестированная) — Services\Database (фабрика), Services\DataBase\Classes\PdoDriver (failover по хостам, транзакции с вложенными SAVEPOINT), Services\DataBase\Classes\Statement (showQuery()/sq()), Services\DataBase\Classes\Profiler/ProfilerPDO (тайминги), Services\DataBase\Model (лёгкий носитель атрибутов). System\Classes\Repository — abstract CRUD; конкретные репозитории — в App/Repositories/* (например App\Repositories\BudgetRepository), не в Services\DataBase — так решил пользователь явно.
  • Elasticsearch — Services\Elasticsearch + Services\Elasticsearch\Client, тонкая REST-обёртка на уже существующем System\Classes\HTTP\Client\Curl (без тяжёлой composer-зависимости elasticsearch/elasticsearch — см. feedback_educational_project.md).
  • Mongo — Services\Mongo + Services\Mongo\MongoDriver, обёртка над MongoDB\Client (композер-пакет mongodb/mongodb уже поставлен через composer.phar require --ignore-platform-req=ext-mongodb, плюс "platform": {"ext-mongodb": "2.3"} в composer.json, чтобы дальнейшие composer install не требовали флага).

Что ждёт внешней инфраструктуры (не моя зона — пользователь занимается сам):

  • ext-mongodb не установлен в docker/php-apache/8.2.8/Dockerfile (общий для нескольких проектов на хосте — мне трогать нельзя). Пользователь добавит сам. Код написан безопасно без расширения — падает только на реальном new MongoDB\Client() внутри MongoDriver::__construct(), не раньше.
  • Контейнеров mongo и elasticsearch в docker-dev/docker-compose.yml нет — пользователь поднимет сам (there уже есть закомментированный черновик блока elasticsearch в файле).
  • БД bicycle на общем MariaDB (контейнер db) ещё не создана, App/config/config.local.php пустой (0 байт) — реальный пароль/пользователь для MariaDB, а также для Mongo/ES (если с авторизацией) — пользователь впишет сам.

Тесты: PdoDriverTest/StatementTest/RepositoryTest бьют по реальной MariaDB (не мокают) — пока БД не настроена, гейтятся через markTestSkipped() в setUp() при неудачном подключении. ElasticsearchClientTest — то же самое через Client::ping(). MongoDriverTest — через extension_loaded('mongodb'). Все они оживут сами, без правки кода, как только пользователь настроит соответствующую инфраструктуру — сейчас (2026-08-07) 26 тестов из 229 пропущены именно поэтому.

How to apply: При запросах, касающихся БД/моделей/репозиториев — этот слой уже есть, не писать заново с нуля, расширять существующие классы. Новый конкретный репозиторий — в App/Repositories/* extends System\Classes\Repository, не в Services\DataBase. См. также idea_cli_entrypoint.md — CLI-точка входа отложена именно до появления этого слоя (первый реальный потребитель — миграции; теперь, когда слой БД есть, эта идея стала актуальнее).