- pluggable per-domain Repository interfaces; PostgreSQL and SQLite impls - SQLite on modernc.org/sqlite (WAL, busy_timeout, foreign_keys, immediate tx) - separate migrations/sqlite and db.MigrateSQLite; store.NewPostgres/NewSQLite - cmd/reconcile compares object storage with the journal (report, then --delete) - storage.Backend.List and photos.Repository.AllStorageKeys - DB_BACKEND/SQLITE_PATH and STORAGE_BACKEND/FS_ROOT selectable; local defaults (sqlite ./galo.db, fs ./data) - Makefile reconcile/reconcile-delete; docs and .env.example updated
2.2 KiB
2.2 KiB
Tasks
1. Перечисление в хранилище
- 1.1 Добавить
List(ctx, prefix)([]ObjectInfo{Key,Size,ModTime}) вstorage.Backendи реализовать вstorage.S3черезListObjectsV2с пагинацией; проверка — тест перечисления под префиксом (подS3_ENDPOINT, иначе пропуск). - 1.2 Реализовать
Listвstorage.FSобходом корня с относительными ключами; проверка — юнит-тест на временном каталоге.
2. Ключи журнала в метаданных
- 2.1 Добавить
AllStorageKeysвphotos.Repositoryи реализовать в pg- и sqlite-store; проверка — контрактный тест на обоих бэкендах.
3. Команда reconcile
- 3.1 Реализовать
cmd/reconcile: инвентаризация обеих сторон, классификация сирот/пропавших, отчёт по умолчанию; проверка — юнит-тесты классификации. - 3.2 Добавить флаги
--delete,--min-age,--sampleс ограничением областиobjects/и защитой свежих блобов; проверка — тест: молодой блоб не удаляется, старый сирота удаляется, пропавшие не трогаются. - 3.3 Собрать бэкенды через конфиг (
storage.Open+ бандл репозиториев) для postgres/sqlite и s3/fs; проверка — запуск на fs и s3.
4. Документация и интеграция
- 4.1 Обновить
README.mdиproject.mdс описанием команды и её безопасного использования; проверка — документированный запуск работает. - 4.2 Интеграционная проверка: создать сироту, прогнать отчёт, затем
--delete, убедиться в удалении и в том, что журнальные записи не затронуты.