Bicycle/.claude/memory/feedback_engine_app_independence.md
2026-08-10 23:24:41 +03:00

26 lines
2.6 KiB
Markdown
Raw Permalink 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: feedback-engine-app-independence
description: Services/System (движок Bicycle) не должны зависеть от App-namespace классов или схемы конкретного проекта
metadata:
type: feedback
---
Код в `System/*` и `Services/*` (движок Bicycle) не должен импортировать или напрямую зависеть от
классов в `App\*` (namespace конкретного приложения) или предполагать конкретную схему БД конкретного
проекта (имена таблиц/колонок). Любая специфика проекта — через конфиг (`App/config/config.php`), а не
хардкод в движке.
**Why:** пользователь явно поправил: «движок под проект не подгоняешь? он должен быть независим и на
нём чтобы можно было любой проект реализовать». Конкретный инцидент: `Services\Auth\DbAuthDriver`
изначально импортировал `App\Repositories\UserRepository` и был жёстко завязан на таблицу `users` с
колонками `login`/`password`/`last_login` этого проекта — на другом проекте с другой структурой это не
заработало бы. Переделан на конфигурируемый драйвер: имя таблицы/колонок (`table`/`primary_col`/
`login_col`/`password_col`/`last_login_col`) читаются из `Config::get('auth', 'db')`, сам класс ничего
не знает про `App\*`. Тест (`tests/Unit/DbAuthDriverTest.php`) специально гоняется на таблице с ДРУГИМИ
именами колонок, чем реальный проект — чтобы независимость проверялась, а не подразумевалась.
**How to apply:** перед тем как добавлять что-то в `System/*`/`Services/*`, проверять: (1) нет ли
`use App\...` в файле; (2) не зашиты ли в SQL/логику конкретные имена таблиц/колонок проекта — если
зашиты, выносить в конфиг с разумными дефолтами. `App/Repositories/*`, `App/Controller/*` — наоборот,
им можно и нужно знать о конкретной схеме (`users`, `budget` и т.д.), это их уровень.