tasks: спроектирован контракт приложения и переставлена голова очереди
- json-api-for-spa: адреса приложения уехали в своё пространство /app/, приём стал POST /app/audiorecords, опрос /api/status/:id убран, заведены список, карточка, текст, /app/me и /app/config; имя файла отправителя легло своей колонкой рядом с заголовком - три действия над записью — правка заголовка, возврат в работу и журнал событий — собраны задачей audiorecord-actions - голова очереди: контракт, каркас, экран загрузки, список, действия - в прежних задачах поправлены адреса, рубежи конвейера и остатки Telegram
This commit is contained in:
@@ -1,36 +1,39 @@
|
||||
# ✨ Сделать экран загрузки записи и её состояния
|
||||
|
||||
- **Тип:** feature
|
||||
- **Категория:** Очередь — Первое, ради чего приложение открывают; требует каркаса и контракта, оба выше.
|
||||
- **Категория:** Очередь — Первое, ради чего приложение открывают; требует каркаса и контракта, оба выше
|
||||
- **Зачем:** Первое, ради чего приложение открывают: отдать файл и увидеть, что с ним происходит.
|
||||
|
||||
Экран принимает файл и заводит задачу, а её состояние обновляется само, пока
|
||||
задача не дошла до `done` или `failed`.
|
||||
Экран принимает файл и заводит запись, а её рубеж обновляется сам, пока запись
|
||||
не дошла до конечного рубежа `done` либо не встала признаком остановки.
|
||||
|
||||
Берётся после `spa-skeleton` и `json-api-for-spa`.
|
||||
|
||||
## Затрагивает
|
||||
|
||||
- новый экран приложения: выбор файла, отправка, показ состояния;
|
||||
- опрос состояния задачи и его остановка;
|
||||
- новый экран приложения: выбор файла, отправка, показ рубежа;
|
||||
- опрос рубежа записи и его остановка;
|
||||
- показ отказа человекочитаемым текстом из контракта API;
|
||||
- предел размера загружаемого файла на стороне приложения и на стороне сервера
|
||||
(`router.MaxMultipartMemory`, сегодня 32 МиБ);
|
||||
- предел размера записи на стороне приложения: экран берёт его из
|
||||
`GET /app/config`, где сервер отдаёт своё же число;
|
||||
- `docs/database.md` — частота опроса числом.
|
||||
|
||||
## Критерии приёмки
|
||||
|
||||
- Выбранный файл уходит на сервер и заводит задачу; экран сразу показывает её
|
||||
состояние. Оракул — тест экрана на подставном API: после отправки на экране
|
||||
идентификатор задачи и состояние `created`.
|
||||
- Опрос сам прекращается, когда задача дошла до `done` или `failed`. Оракул —
|
||||
тест: после ответа `done` новых запросов к API нет.
|
||||
- Отказ задачи показывается человекочитаемым текстом, а не кодом и не сырой
|
||||
ошибкой. Оракул — тест на ответе с состоянием `failed`.
|
||||
- Выбранный файл уходит на сервер и заводит запись; экран сразу показывает её
|
||||
рубеж. Оракул — тест экрана на подставном API: после отправки на экране
|
||||
идентификатор записи и рубеж `uploaded`.
|
||||
- Опрос сам прекращается, когда запись дошла до `done` либо встала признаком
|
||||
остановки. Оракул — два теста: после ответа с рубежом `done` новых запросов к
|
||||
API нет; после ответа с признаком остановки — тоже.
|
||||
- Остановленная запись показывается человекочитаемым текстом, а не кодом и не
|
||||
сырой ошибкой; машинного текста отказа контракт не отдаёт вовсе, поэтому текст
|
||||
строится из причины остановки. Оракул — тест на ответе с признаком остановки и
|
||||
причиной.
|
||||
- Файл больше предела отклоняется на экране до отправки, с названным числом, и
|
||||
предел экран берёт у сервера, а не держит своей константой. Оракул — тест на
|
||||
файле сверх предела: запроса на загрузку нет, на экране предел числом, и
|
||||
смена предела на стороне сервера меняет это число.
|
||||
предел экран берёт из `GET /app/config`, а не держит своей константой. Оракул
|
||||
— тест на файле сверх предела: запроса на загрузку нет, на экране предел
|
||||
числом, и другое число в ответе `config` меняет показанное.
|
||||
|
||||
## Рамки
|
||||
|
||||
|
||||
Reference in New Issue
Block a user