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

48 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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-точка входа отложена именно до появления этого слоя (первый реальный потребитель — миграции;
теперь, когда слой БД есть, эта идея стала актуальнее).