Files
ds-galo/openspec/changes/archive/2026-10-11-sqlite-metadata-backend/tasks.md
T
iu 8638d1bbfc chore(openspec): archive completed changes and sync main specs
- archive local-fs-storage-backend, sqlite-metadata-backend,
  storage-orphan-reconciliation, metadata-managed-jwt-secret, default-local-backends
- sync specs: storage-backends, metadata-backends, storage-reconciliation,
  app-secrets; update photos/share-links
- defaults reflected in specs: SQLite and local FS
2026-10-11 10:19:44 +03:00

4.2 KiB
Raw Blame History

Tasks

1. Интерфейсы репозиториев и контрактный набор

  • 1.1 Ввести Repository в доменах auth, albums, members, photos, social, notifications, sharelinks и перевести сервисы на интерфейсы; проверка — go build ./... проходит, PostgreSQL-реализации не менялись.
  • 1.2 Поднять общий контрактный набор тестов на каждый Repository; проверка — набор зелёный на PostgreSQL под TEST_DATABASE_URL (пропуск без него).
  • 1.3 Зафиксировать маппинг sentinel-ошибок домена и created_at через RETURNING как часть контракта; проверка — тесты ошибок «не найдено» на Postgres проходят.

2. SQLite: драйвер, миграции, фабрика

  • 2.1 Добавить modernc.org/sqlite и подключение с journal_mode=WAL, busy_timeout, foreign_keys=ON; проверка — тест открытия, Ping и применения прагм проходит.
  • 2.2 Добавить набор migrations/sqlite/ и db.MigrateSQLite; проверка — тест применяет схему на временном файле и повторный запуск идемпотентен.
  • 2.3 Реализовать фабрику store.NewPostgres(pool) / store.NewSQLite(db), возвращающую бандл Repository; проверка — тест собирает бандл для обоих бэкендов и go build ./... проходит.

3. SQLite-реализации доменов

  • 3.1 Реализовать SQLite-store для auth, members, albums; проверка — контрактные тесты этих доменов зелёные на SQLite.
  • 3.2 Реализовать SQLite-store для photos (фото, метки, корзина, backfill EXIF); проверка — контрактные тесты photos зелёные на SQLite.
  • 3.3 Реализовать SQLite-логику объектов (BindObject, ClaimGarbage, ClaimStalePending, ClaimVariantJobs, FailVariantJob) в BEGIN IMMEDIATE; проверка — тесты на атомарность привязки/GC и на backoff зелёные.
  • 3.4 Реализовать SQLite-store для social, notifications, sharelinks; проверка — контрактные тесты этих доменов зелёные на SQLite.

4. Конфигурация, проводка, health, документация

  • 4.1 Ввести DB_BACKEND=postgres|sqlite и SQLITE_PATH с условной валидацией; проверка — юнит-тесты config.Load для обоих бэкендов и неполной конфигурации.
  • 4.2 Перевести app.New на бандл репозиториев и выбрать бэкенд в cmd/server; проверка — сервер стартует с обоими значениями DB_BACKEND, db-метка в health динамическая.
  • 4.3 Обновить .env.example, project.md и README с ограничением «один экземпляр на файл SQLite»; проверка — документированный запуск с DB_BACKEND=sqlite стартует.

5. Интеграционные проверки

  • 5.1 Прогнать полный контрактный набор на обоих бэкендах и сравнить результаты; проверка — одинаковые исходы на Postgres и SQLite.
  • 5.2 End-to-end на SQLite (регистрация → альбом → загрузка → превью → удаление → GC) с перезапуском процесса; проверка — очередь вариантов и GC продолжаются, сирот нет.
  • 5.3 Убедиться, что дефолт postgres не меняет текущее развёртывание; проверка — запуск без новых переменных проходит как раньше.