Секции «Ядро» и «Инфра» слиты в одну «Очередь»: полок домена у проекта нет, а две секции держали два независимых порядка вместо одного. Порядок: красный гейт, потом долги, задевающие интерфейсы, потом хранилище, вход, разграничение, приложение. Разведка потолков SpeechKit последней — она обслуживает направление, а не очередь.
45 lines
3.1 KiB
Markdown
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`.
|
|
|
|
## Рамки
|
|
|
|
Данные прежней базы не переносим и не пытаемся сохранить; выкладку не запускаем;
|
|
смена формата хранения на сервере необратима, и момент перехода назначает
|
|
человек.
|