Files
transcriber/tasks/items/pocketbase-storage.md
T
av d21da8575c Единый список задач вместо двух секций, порядок по выполнению
Секции «Ядро» и «Инфра» слиты в одну «Очередь»: полок домена у проекта
нет, а две секции держали два независимых порядка вместо одного.

Порядок: красный гейт, потом долги, задевающие интерфейсы, потом
хранилище, вход, разграничение, приложение. Разведка потолков SpeechKit
последней — она обслуживает направление, а не очередь.
2026-08-10 21:39:55 +03:00

45 lines
3.1 KiB
Markdown

# 🧹 Перевести хранилище на встроенный PocketBase
- **Тип:** chore
- **Категория:** Очередь
- **Зачем:** Хранилище, учётные записи и веб-панель нужны все три, и SQLite с goqu не даёт ни второго, ни третьего.
PocketBase встраивается библиотекой в тот же бинарник и приносит хранилище,
учётные записи и панель администратора разом. Наблюдаемое поведение сервиса
после перевода не меняется: те же два входа, тот же конвейер, тот же текст на
выходе.
Данные не переносим — база заводится с чистого листа, и это решение принято
сознательно.
## Затрагивает
- таблицы `files` и `transcribe_jobs`, каталог `migrations/` и весь механизм
goose;
- `internal/adapter/repo/sqlite` целиком, включая захват задачи через
`FindAndAcquire`;
- `internal/contract`, интерфейсы `FileRepository` и `TranscriptJobRepository`;
- ключ конфигурации `[database] path` и раскладка каталога `data/`;
- сборка образа: PocketBase тянет свой набор зависимостей, а `mattn/go-sqlite3`
с его требованием CGO может уйти;
- `docs/database.md` — схема, представление данных и таблица настроек.
## Критерии приёмки
- Сервис поднимается на чистом каталоге данных, накатывает свою схему сам и
принимает запись обоими входами. Оракул — запуск на пустом `data/` и прогон
записи из Telegram и через `POST /api/audio` до состояния `done`.
- Захват задачи воркером не выдаёт одну запись двум вызывающим. Оракул — тест
на трёх параллельных вызовах захвата по одному состоянию: ровно один
получает запись.
- Задача, брошенная на середине, достаётся снова по истечении срока захвата.
Оракул — тест с проставленным задним числом `acquire_time`.
- `docs/database.md` описывает новую схему, а старые упоминания goose и goqu из
документов канона убраны. Оракул — `task gate`, шаг `docs.py check`.
## Рамки
Данные прежней базы не переносим и не пытаемся сохранить; выкладку не запускаем;
смена формата хранения на сервере необратима, и момент перехода назначает
человек.