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,7 +1,7 @@
|
||||
# ✨ Сделать экран списка своих записей и чтения текста
|
||||
|
||||
- **Тип:** feature
|
||||
- **Категория:** Очередь — Список и чтение текста берутся после экрана загрузки — так записано в самой задаче.
|
||||
- **Категория:** Очередь — Список и экран одной записи берутся после экрана загрузки
|
||||
- **Зачем:** Расшифровка сегодня доходит одним сообщением и теряется в переписке; вернуться к ней через неделю нечем.
|
||||
|
||||
Список своих записей открывается и листается, а готовый текст читается и
|
||||
@@ -13,32 +13,40 @@
|
||||
|
||||
- новый экран списка и экран одной записи;
|
||||
- постраничное чтение из контракта API;
|
||||
- подпись записи в строке списка: заголовок, а пока его нет — имя файла
|
||||
отправителя;
|
||||
- чтение текста отдельным адресом и показ его репликами со временем;
|
||||
- копирование текста в буфер обмена;
|
||||
- показ записи, которая ещё в работе, — тем же состоянием, что на экране
|
||||
загрузки.
|
||||
- показ записи, которая ещё в работе, — тем же рубежом, что на экране загрузки.
|
||||
|
||||
## Критерии приёмки
|
||||
|
||||
- Список показывает записи вошедшего, новые сверху, и листается дальше первой
|
||||
страницы. Оракул — тест экрана на подставном API с двумя страницами.
|
||||
- Строка списка подписана заголовком, а у записи без заголовка — именем файла
|
||||
отправителя. Оракул — тест на двух записях: с заголовком и без.
|
||||
- Текст готовой записи открывается целиком, без деления на части. Оракул — тест
|
||||
на записи с текстом длиннее предела сообщения Telegram: на экране весь текст.
|
||||
на записи с текстом в сотни килобайт: на экране весь текст.
|
||||
- Текст копируется одним действием. Оракул — тест: после действия в буфере обмена
|
||||
тот же текст.
|
||||
- Запись в работе показывается состоянием и доходит до текста без перезагрузки
|
||||
экрана. Оракул — тест: подставной API отвечает `transcribe`, затем `done`;
|
||||
экран переходит к тексту сам.
|
||||
- Запись в работе показывается рубежом и доходит до текста без перезагрузки
|
||||
экрана. Оракул — тест: подставной API отвечает рубежом `submitted`, затем
|
||||
`done`; экран переходит к тексту сам.
|
||||
|
||||
**Учесть от ревью 2026-08-12:** имя файла в хранилище несёт хвост имени, данного
|
||||
отправителем, — расширение берётся из него дословно, и запись
|
||||
`разговор.тайное-слово` ложится на диск именем с этим хвостом. Сегодня наружу
|
||||
оно не выходит: изъятие из инварианта приватности кончается журналом владельца.
|
||||
Экран списка это меняет — имя попадает в ссылку на скачивание и в заголовок
|
||||
ответа, то есть на страницу. Выхода за каталог хранения при этом нет, проверено
|
||||
пятнадцатью враждебными именами.
|
||||
`разговор.тайное-слово` ложится на диск именем с этим хвостом. Выхода за каталог
|
||||
хранения при этом нет, проверено пятнадцатью враждебными именами. Наружу это имя
|
||||
не выходит и теперь: аудио отдаётся своим адресом по идентификатору записи, а не
|
||||
ссылкой хранилища, и имени файла в ней нет. На страницу попадает другое — имя,
|
||||
данное отправителем, своей колонкой записи, и попадает намеренно: по нему человек
|
||||
узнаёт свою запись. Отсюда обязанность экрана — показывать его текстом, а не
|
||||
разметкой.
|
||||
|
||||
## Рамки
|
||||
|
||||
Поиска по тексту, переименования и удаления записей не делаем. Правки текста не
|
||||
делаем — это граница из [паспорта](../../docs/passport.md): расшифровку отдаём как
|
||||
есть.
|
||||
Поиска по тексту не делаем. Переименование записи, возврат её в работу и журнал
|
||||
событий — `audiorecord-actions`; удаление — `delete-record`, проигрывание —
|
||||
`play-recording-in-app`. Правки текста
|
||||
не делаем — это граница из [паспорта](../../docs/passport.md): расшифровку отдаём
|
||||
как есть.
|
||||
|
||||
Reference in New Issue
Block a user