хранилище, файлы записей и очередь переведены на встроенную PocketBase
- записи, метаданные и файлы съехались под один каталог данных; появилась панель владельца, а gin, goqu, goose и требование CGO ушли - захват задачи стал одним запросом с RETURNING; заведены число попыток, состояние dead и нарастающая пауза вместо признака is_error - имя файла в хранилище задаёт сервис и в журнал не идёт: вместе с идентификатором записи оно собирало бы ссылку на скачивание
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
- Конвертация в ogg через ffmpeg
|
||||
- Распознавание речи через Yandex SpeechKit
|
||||
- Отслеживание статуса задач расшифровки
|
||||
- SQLite для хранения метаданных, метрики Prometheus
|
||||
- Встроенная PocketBase для метаданных, файлов и панели владельца; метрики Prometheus
|
||||
|
||||
## Технологии
|
||||
|
||||
@@ -17,9 +17,8 @@
|
||||
- **Telegram**: go-telegram-bot-api
|
||||
- **Распознавание**: Yandex SpeechKit + Yandex Object Storage (S3)
|
||||
- **Конвертация**: ffmpeg
|
||||
- **SQL Builder**: doug-martin/goqu
|
||||
- **Миграции БД**: pressly/goose
|
||||
- **База данных**: SQLite
|
||||
- **Хранилище, файлы и панель**: встроенная PocketBase
|
||||
- **База данных**: SQLite внутри PocketBase (через modernc.org/sqlite, CGO не нужен)
|
||||
- **Метрики**: prometheus/client_golang
|
||||
|
||||
## Установка и запуск
|
||||
@@ -97,36 +96,26 @@ transcriber/
|
||||
│ ├── metaviewer/ffmpeg/ # Длительность аудио
|
||||
│ ├── recognizer/yandex/ # SpeechKit + Object Storage
|
||||
│ ├── telegram/ # Отправка сообщений
|
||||
│ └── repo/sqlite/ # Репозитории
|
||||
├── migrations/ # Миграции goose, вшиты в бинарник через go:embed
|
||||
└── data/
|
||||
├── files/ # Директория для сохранения файлов
|
||||
└── transcriber.db # SQLite база данных (создается автоматически)
|
||||
│ └── repo/pocketbase/ # Репозитории, схема коллекций, правила панели
|
||||
└── data/ # Каталог данных: база и файлы записей вместе
|
||||
├── data.db # База хранилища (создаётся автоматически)
|
||||
└── storage/ # Файлы записей в раскладке хранилища
|
||||
```
|
||||
|
||||
## База данных
|
||||
## Хранилище
|
||||
|
||||
Две таблицы, `files` и `transcribe_jobs`. Колонки, ключи, правило времени и
|
||||
Две коллекции, `files` и `transcribe_jobs`. Поля, ключи, правило времени и
|
||||
идентификаторов, а также механика захвата задачи воркером —
|
||||
[docs/database.md](docs/database.md).
|
||||
[docs/database.md](docs/database.md). Панель владельца — по адресу `/_/` того же
|
||||
порта; пароль от неё задаёт сам владелец по приглашению, которое сервис печатает
|
||||
в журнал при первом запуске.
|
||||
|
||||
## Разработка
|
||||
|
||||
Миграции накатываются автоматически при старте сервиса — они вшиты в бинарник
|
||||
через `//go:embed`. Достаточно положить новый файл в `migrations/`.
|
||||
|
||||
Создать файл миграции и накатить или откатить её вручную:
|
||||
|
||||
```bash
|
||||
# Создание новой миграции
|
||||
goose -dir migrations create migration_name sql
|
||||
|
||||
# Применение миграций
|
||||
goose -dir migrations sqlite3 data/transcriber.db up
|
||||
|
||||
# Откат миграций
|
||||
goose -dir migrations sqlite3 data/transcriber.db down
|
||||
```
|
||||
Схему двигают шаги миграций PocketBase на Go —
|
||||
`internal/adapter/repo/pocketbase`. Непринятые шаги накатываются при подъёме
|
||||
хранилища, прежде чем стартуют воркеры и сервер. Применённый шаг не
|
||||
переписывается: изменение — только новым файлом шага.
|
||||
|
||||
Проверки перед коммитом — одной командой:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user