147 lines
4.1 KiB
Markdown
147 lines
4.1 KiB
Markdown
# Transcriber Service
|
||
|
||
Сервис для расшифровки аудиозаписей с REST API.
|
||
|
||
## Возможности
|
||
|
||
- Загрузка аудиофайлов любого формата
|
||
- Автоматическая генерация UUID для файлов
|
||
- Сохранение файлов на диск
|
||
- Отслеживание статуса задач расшифровки
|
||
- SQLite база данных для хранения метаданных
|
||
|
||
## Технологии
|
||
|
||
- **Веб-фреймворк**: gin-gonic/gin
|
||
- **SQL Builder**: doug-martin/goqu
|
||
- **Миграции БД**: pressly/goose
|
||
- **База данных**: SQLite
|
||
- **UUID**: google/uuid
|
||
|
||
## Установка и запуск
|
||
|
||
1. Клонируйте репозиторий
|
||
2. Установите зависимости:
|
||
```bash
|
||
go mod tidy
|
||
```
|
||
3. Запустите приложение:
|
||
```bash
|
||
go run main.go
|
||
```
|
||
|
||
Сервер запустится на порту 8080.
|
||
|
||
## API Endpoints
|
||
|
||
### POST /api/transcribe
|
||
|
||
Загружает аудиофайл и создает задачу на расшифровку.
|
||
|
||
**Параметры:**
|
||
- `audio` (form-data) - аудиофайл для расшифровки
|
||
|
||
**Пример запроса:**
|
||
```bash
|
||
curl -X POST \
|
||
http://localhost:8080/api/transcribe \
|
||
-F "audio=@/path/to/your/audio.mp3"
|
||
```
|
||
|
||
**Ответ:**
|
||
```json
|
||
{
|
||
"job_id": "550e8400-e29b-41d4-a716-446655440000",
|
||
"file_id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
|
||
"status": "pending"
|
||
}
|
||
```
|
||
|
||
### GET /api/transcribe/:id
|
||
|
||
Получает статус задачи расшифровки по ID.
|
||
|
||
**Пример запроса:**
|
||
```bash
|
||
curl http://localhost:8080/api/transcribe/550e8400-e29b-41d4-a716-446655440000
|
||
```
|
||
|
||
**Ответ:**
|
||
```json
|
||
{
|
||
"id": "550e8400-e29b-41d4-a716-446655440000",
|
||
"status": "pending",
|
||
"file_id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
|
||
"created_at": "2024-01-01T12:00:00Z",
|
||
"updated_at": "2024-01-01T12:00:00Z"
|
||
}
|
||
```
|
||
|
||
### GET /health
|
||
|
||
Проверка работоспособности сервиса.
|
||
|
||
**Ответ:**
|
||
```json
|
||
{
|
||
"status": "ok",
|
||
"message": "Transcriber service is running"
|
||
}
|
||
```
|
||
|
||
## Статусы задач
|
||
|
||
- `pending` - задача создана, ожидает обработки
|
||
- `processing` - задача выполняется
|
||
- `completed` - задача завершена успешно
|
||
- `failed` - задача завершена с ошибкой
|
||
|
||
## Структура проекта
|
||
|
||
```
|
||
transcriber/
|
||
├── main.go # Точка входа приложения
|
||
├── go.mod # Зависимости Go
|
||
├── models/
|
||
│ └── models.go # Модели данных
|
||
├── database/
|
||
│ └── database.go # Слой работы с БД
|
||
├── handlers/
|
||
│ └── transcribe.go # HTTP обработчики
|
||
├── migrations/
|
||
│ ├── 001_create_files_table.sql
|
||
│ └── 002_create_transcribe_jobs_table.sql
|
||
└── data/
|
||
├── files/ # Директория для сохранения файлов
|
||
└── transcriber.db # SQLite база данных (создается автоматически)
|
||
```
|
||
|
||
## База данных
|
||
|
||
### Таблица `files`
|
||
- `id` (TEXT) - UUID файла
|
||
- `type` (TEXT) - MIME-тип файла
|
||
- `size` (INTEGER) - размер файла в байтах
|
||
- `created_at` (DATETIME) - время создания
|
||
|
||
### Таблица `transcribe_jobs`
|
||
- `id` (TEXT) - UUID задачи
|
||
- `status` (TEXT) - статус задачи
|
||
- `file_id` (TEXT) - ссылка на файл
|
||
- `created_at` (DATETIME) - время создания
|
||
- `updated_at` (DATETIME) - время последнего обновления
|
||
|
||
## Разработка
|
||
|
||
Для добавления новых миграций используйте goose:
|
||
|
||
```bash
|
||
# Создание новой миграции
|
||
goose -dir migrations create migration_name sql
|
||
|
||
# Применение миграций
|
||
goose -dir migrations sqlite3 data/transcriber.db up
|
||
|
||
# Откат миграций
|
||
goose -dir migrations sqlite3 data/transcriber.db down
|