4.8 KiB
| name | description | metadata | ||
|---|---|---|---|---|
| roadmap | Статус слоя БД (MariaDB/Mongo/Elasticsearch) в Bicycle — что реализовано, что ждёт внешней инфраструктуры |
|
Реализовано (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-точка входа отложена именно до появления этого слоя (первый реальный потребитель — миграции;
теперь, когда слой БД есть, эта идея стала актуальнее).