# ✨ Сделать экран загрузки записи и её состояния - **Тип:** feature - **Категория:** Очередь — Первое, ради чего приложение открывают; требует каркаса и контракта, оба выше - **Зачем:** Первое, ради чего приложение открывают: отдать файл и увидеть, что с ним происходит. Экран принимает файл и заводит запись, а её рубеж обновляется сам, пока запись не дошла до конечного рубежа `done` либо не встала признаком остановки. Берётся после `spa-skeleton` и `json-api-for-spa`. ## Затрагивает - новый экран приложения: выбор файла, отправка, показ рубежа; - опрос рубежа записи и его остановка; - показ отказа человекочитаемым текстом из контракта API; - предел размера записи на стороне приложения: экран берёт его из `GET /app/config`, где сервер отдаёт своё же число; - `docs/database.md` — частота опроса числом. ## Критерии приёмки - Выбранный файл уходит на сервер и заводит запись; экран сразу показывает её рубеж. Оракул — тест экрана на подставном API: после отправки на экране идентификатор записи и рубеж `uploaded`. - Опрос сам прекращается, когда запись дошла до `done` либо встала признаком остановки. Оракул — два теста: после ответа с рубежом `done` новых запросов к API нет; после ответа с признаком остановки — тоже. - Остановленная запись показывается человекочитаемым текстом, а не кодом и не сырой ошибкой; машинного текста отказа контракт не отдаёт вовсе, поэтому текст строится из причины остановки. Оракул — тест на ответе с признаком остановки и причиной. - Файл больше предела отклоняется на экране до отправки, с названным числом, и предел экран берёт из `GET /app/config`, а не держит своей константой. Оракул — тест на файле сверх предела: запроса на загрузку нет, на экране предел числом, и другое число в ответе `config` меняет показанное. ## Рамки Записи звука в приложении не делаем — файл выбирают в системном диалоге. Список прошлых записей не делаем, это `records-list-screen`.