tasks: спроектирован контракт приложения и переставлена голова очереди

- json-api-for-spa: адреса приложения уехали в своё пространство /app/,
  приём стал POST /app/audiorecords, опрос /api/status/:id убран, заведены
  список, карточка, текст, /app/me и /app/config; имя файла отправителя
  легло своей колонкой рядом с заголовком
- три действия над записью — правка заголовка, возврат в работу и журнал
  событий — собраны задачей audiorecord-actions
- голова очереди: контракт, каркас, экран загрузки, список, действия
- в прежних задачах поправлены адреса, рубежи конвейера и остатки Telegram
This commit is contained in:
av
2026-08-15 09:06:11 +03:00
parent d88e56efcb
commit 79ff12548f
16 changed files with 351 additions and 115 deletions
+11 -9
View File
@@ -12,18 +12,19 @@
## Затрагивает
- `TranscribeService.createTranscribeJob` — проверка длительности и веса до
записи файла на диск;
- контракт `POST /api/audio`: код и тело ответа на запись сверх потолка;
- ответ бота на слишком длинную запись;
- `TranscribeService.createRecord` — проверка длительности и веса до записи
файла в хранилище;
- контракт `POST /app/audiorecords`: код и тело ответа на запись сверх потолка;
- `GET /app/config` — потолок длительности рядом с потолком размера, чтобы экран
отклонял такую запись до отправки;
- секция конфигурации: потолок длительности и потолок веса;
- `docs/database.md` — настройки с числовым значением.
## Критерии приёмки
- Запись длиннее потолка отклоняется на приёме: задача не заводится, файл на
диске не остаётся. Оракул — тест приёма на записи сверх потолка: задач ноль,
каталог хранения пуст.
- Запись длиннее потолка отклоняется на приёме: аудиозапись не заводится, файл в
хранилище не остаётся. Оракул — тест приёма на записи сверх потолка: записей
ноль, каталог хранения пуст.
- Отправитель видит человекочитаемый текст с названным пределом, а не код
ошибки. Оракул — тест: в теле ответа предел числом, текста внутренней ошибки
нет.
@@ -36,5 +37,6 @@
Берётся после `intake-limits-measure`: до неё потолок брать неоткуда. Длительность
известна из `ffprobe` — значит, проверка идёт после чтения метаданных, но до
записи в базу. Предел веса на стороне сервера уже есть
(`router.MaxMultipartMemory`), и он не отменяется, а дополняется.
записи в базу. Предел размера на стороне сервера уже есть`entity.MaxRecordSize`
стоит и у поля файла, и у тела запроса приёма, — и он не отменяется, а
дополняется потолком длительности.