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