Перейти к содержанию

Модель системы

Модель данных

TranscriptionJob

Основная сущность процесса транскрибации.

Атрибуты:

  • fileId
  • ownerUserId
  • inputS3Key
  • transcriptS3Key
  • status
  • providerTranscriptId
  • createdAt
  • updatedAt
  • errorReason
  • speakerMode
  • fileSize
  • durationEstimate

Системные инварианты

  • job принадлежит одному пользователю;
  • download URL выдаётся только владельцу job;
  • transcript можно скачать только в статусе READY;
  • webhook должен быть idempotent;
  • повторный callback от provider не должен создавать новый transcript;
  • failed job не должен блокировать список остальных job;
  • presigned URLs имеют ограниченное время жизни.

DynamoDB - статусы джобов

Каждая задача транскрибации хранится как запись БД с жизненным циклом:

State Machine Значение
UPLOADING Выдана предподписанная ссылка; идёт загрузка клиентом
TRANSMITTING Аудио загружено в S3; отправка в сервис
PROCESSING сервис транскрибирует (transcript_id сохранён)
READY Транскрипт сохранён в S3; доступен для скачивания
ERROR Ошибка AssemblyAI или пайплайна (причина в логе)

Amazon S3

  • Bucket файлов: загрузки аудио и сгенерированные транскрипты (Transcript.txt).
  • Bucket статического сайта: SPA, раздаётся через CloudFront.

API-контракты

API Gateway (аутентификация)

Метод Путь Назначение
GET /upload-url Создать запись; вернуть Presigned POST URL и fileId
GET /jobs Список джобов пользователя (polling UI)
GET /download-url?fileId=... Проверка доступа; Presigned GET URL транскрипта
POST /webhook Callback AssemblyAI (transcript_id)

Все маршруты API Gateway требуют JWT (Amazon Cognito), кроме /webhook (callback провайдера транскрибации).

Amazon Cognito (Hosted UI / PKCE)

Метод Путь Назначение
POST /oauth2/token Обмен authorization code на Access & ID tokens

внешний API провайдера транскрибации

Метод Путь Назначение
POST /v2/transcript Отправка URL аудио + webhook URL; возвращает transcript_id
GET /v2/transcript/{id} Получение готового текста транскрипции

Amazon S3 (прямой доступ клиента)

Метод Цель Назначение
POST Presigned POST URL Прямая загрузка аудио (обход лимитов API Gateway)
GET Presigned GET URL Прямое скачивание транскрипта