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