- порядок беклога и роадмапа назначен слоями: проверки, которым можно верить → долги входа → владелец записи и контракт API → конвейер под тестами → приложение и возможности поверх; у каждого движения записана причина; - заведены восемь задач под пункты «Завершения», которых не закрывала ни одна запись, — цель any-audio-source была без задач вовсе; - у четырёх задач сняты критерии, требовавшие того, что делает задача ниже по очереди; исправлены ссылки на несуществующий repo/sqlite и на отменённую разведку об очереди.
40 lines
2.8 KiB
Markdown
40 lines
2.8 KiB
Markdown
# ✨ Принимать до десяти файлов одной загрузкой
|
|
|
|
- **Тип:** feature
|
|
- **Категория:** Очередь — Пачка файлов заводится на готовом экране загрузки и готовой дедупликации.
|
|
- **Зачем:** Приём берёт один файл в запросе, а с телефона выбирают пачку сразу: десять записей значат десять заходов на экран загрузки.
|
|
- **Теги:** goal:upload-reliability
|
|
|
|
Двигает пункт 2 «Завершения» цели: пачка файлов уходит одной загрузкой, и отказ
|
|
одного не отменяет остальные.
|
|
|
|
## Затрагивает
|
|
|
|
- контракт `POST /api/audio`: несколько файлов в одной форме и ответ списком;
|
|
- `TranscribeService.createTranscribeJob` — заведение нескольких задач одним
|
|
запросом;
|
|
- экран загрузки: выбор нескольких файлов и показ их состояний;
|
|
- предел числа файлов и предел размера запроса на стороне сервера;
|
|
- `docs/database.md` — предел числа файлов числом.
|
|
|
|
## Критерии приёмки
|
|
|
|
- Десять файлов одной формой заводят десять задач, и ответ отдаёт
|
|
идентификатор каждой. Оракул — тест приёма: в ответе десять записей, в
|
|
репозитории десять задач.
|
|
- Негодный файл в пачке отклоняется поимённо, а годные соседи заводятся. Оракул
|
|
— тест на пачке из годного и негодного: одна задача заведена, второй элемент
|
|
ответа несёт причину отказа.
|
|
- Одиннадцатый файл отклоняется до чтения содержимого, с названным пределом.
|
|
Оракул — тест на пачке из одиннадцати: задач не заведено, в теле ответа
|
|
предел числом.
|
|
- Прежний вызов с одним файлом работает по-старому. Оракул — существующие тесты
|
|
приёма по HTTP.
|
|
|
|
## Рамки
|
|
|
|
Публичный контракт `POST /api/audio` меняется, а это необратимо — форма ответа
|
|
согласуется с человеком. Загрузка частями сюда не входит: это
|
|
`chunked-upload-choice`. Приём из Telegram не трогается — бот присылает файлы по
|
|
одному.
|