# Proposal ## Why Слой метаданных жёстко привязан к PostgreSQL: каждый store держит `*pgxpool.Pool` и пишет SQL диалекта Postgres. Инсталляциям без внешней БД нужен встроенный, самодостаточный режим на SQLite с паритетом поведения для одного экземпляра приложения. ## What Changes - Ввести интерфейсы репозиториев по доменам (auth, albums, members, photos, social, notifications, sharelinks); существующие pgx-типы становятся одной из реализаций. - Добавить SQLite-реализации (~72 метода, включая жизненный цикл объектов, сборку мусора и очередь вариантов) на чистом Go (`modernc.org/sqlite`, `CGO_ENABLED=0`). - Добавить отдельный набор миграций для SQLite. - Ввести `DB_BACKEND=postgres|sqlite` и `SQLITE_PATH`; валидировать условно; настроить WAL, `busy_timeout`, `foreign_keys`. - Добавить фабрику сборки репозиториев по выбранному бэкенду. - Обеспечить единый контрактный набор тестов, прогоняемый на обоих бэкендах. ## Capabilities ### New Capabilities - `metadata-backends`: выбор и работа слоя метаданных — PostgreSQL и встроенная SQLite с паритетным поведением для одного экземпляра. ### Modified Capabilities ## Impact - `backend/internal/*/store.go` и `backend/internal/photos/objects.go` (интерфейсы + SQLite-реализации), `internal/db`, `internal/app`, `cmd/server`, `config`, `migrations`. - Тесты: общий контрактный набор для Postgres и SQLite. - `.env.example`, `project.md`. - Ограничение: один экземпляр приложения на один SQLite-файл (без горизонтального масштабирования); Postgres остаётся поведением по умолчанию. - Не затрагивает слой хранения.