- json-api-for-spa: адреса приложения уехали в своё пространство /app/, приём стал POST /app/audiorecords, опрос /api/status/:id убран, заведены список, карточка, текст, /app/me и /app/config; имя файла отправителя легло своей колонкой рядом с заголовком - три действия над записью — правка заголовка, возврат в работу и журнал событий — собраны задачей audiorecord-actions - голова очереди: контракт, каркас, экран загрузки, список, действия - в прежних задачах поправлены адреса, рубежи конвейера и остатки Telegram
3.2 KiB
3.2 KiB
✨ Отклонять на приёме запись сверх потолка
- Тип: feature
- Категория: Очередь — Отклонять сверх потолка можно, когда потолок замерен.
- Зачем: Запись сверх потолка принимается молча и висит в конвейере до истечения часового захвата, а человек всё это время ждёт текста.
Запись длиннее потолка отклоняется на приёме понятным текстом, а не отказом через час.
Потолок задаётся конфигурацией, а не зашивается в код: числа приходят из
разведок intake-limits-measure и speechkit-limits, и меняются они без сборки.
Затрагивает
TranscribeService.createRecord— проверка длительности и веса до записи файла в хранилище;- контракт
POST /app/audiorecords: код и тело ответа на запись сверх потолка; GET /app/config— потолок длительности рядом с потолком размера, чтобы экран отклонял такую запись до отправки;- секция конфигурации: потолок длительности и потолок веса;
docs/database.md— настройки с числовым значением.
Критерии приёмки
- Запись длиннее потолка отклоняется на приёме: аудиозапись не заводится, файл в хранилище не остаётся. Оракул — тест приёма на записи сверх потолка: записей ноль, каталог хранения пуст.
- Отправитель видит человекочитаемый текст с названным пределом, а не код ошибки. Оракул — тест: в теле ответа предел числом, текста внутренней ошибки нет.
- Запись в пределах потолка принимается по-прежнему. Оракул — существующие тесты приёма по HTTP.
- Потолок меняется конфигурацией без пересборки. Оракул — тест разбора конфигурации с двумя разными значениями.
Рамки
Берётся после intake-limits-measure: до неё потолок брать неоткуда. Длительность
известна из ffprobe — значит, проверка идёт после чтения метаданных, но до
записи в базу. Предел размера на стороне сервера уже есть — entity.MaxRecordSize
стоит и у поля файла, и у тела запроса приёма, — и он не отменяется, а
дополняется потолком длительности.