Веб-UI: основной идентификатор карточек — download.id вместо infohash
В карточке списка и шапке /download/{id} показываем и копируем download.id
(ULID) — тот же ключ, что в логах (download_id), удобно грепать. Infohash
остаётся в блоке «Информация о торренте». Поиск по списку расширен: матчит
любой идентификатор (download.id ИЛИ infohash), плюс название/контекст.
Удалены осиротевшие поля Infohash/InfohashShort и хелпер shortenHash.
Дельта web-ui влита в спеки, change заархивирован.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -5,8 +5,8 @@
|
||||
Презентационный слой веб-интерфейса: встроенная (`go:embed`) отдача статики и
|
||||
self-hosted шрифтов, единая дизайн-система (`jellybit.css`, тёмная тема по
|
||||
настройке ОС), рендеринг страниц (список загрузок, ревью, просмотр) с бейджами
|
||||
состояний и клиентскими взаимодействиями без сборки (копирование infohash,
|
||||
спойлер контекста). Превью раскладки берётся из единой логики `internal/layout`,
|
||||
состояний и клиентскими взаимодействиями без сборки (копирование идентификатора
|
||||
загрузки, спойлер контекста). Превью раскладки берётся из единой логики `internal/layout`,
|
||||
а не дублируется в шаблонах. Тонкий транспорт над ядром (приём — `ingest`,
|
||||
команды — `worker`, чтение — `store`).
|
||||
## Requirements
|
||||
@@ -130,8 +130,8 @@ self-hosted шрифтов, единая дизайн-система (`jellybit.
|
||||
- **WHEN** клиент запрашивает список с параметрами фильтра по состоянию и/или
|
||||
строкой поиска (`GET /?f=review&q=дюна`)
|
||||
- **THEN** сервер возвращает только подходящие загрузки (по группе состояний и
|
||||
совпадению строки в названии/infohash/контексте), отфильтрованные на стороне
|
||||
БД, а не на клиенте
|
||||
совпадению строки в названии, любом идентификаторе загрузки — `download.id`
|
||||
ИЛИ infohash — и контексте), отфильтрованные на стороне БД, а не на клиенте
|
||||
|
||||
### Requirement: Порядок списка загрузок
|
||||
|
||||
@@ -262,14 +262,18 @@ jellybit (`created_at`). Порядок MUST быть согласован ме
|
||||
### Requirement: Клиентские взаимодействия без сборки
|
||||
|
||||
Веб-UI SHALL реализовывать клиентскую логику без шага сборки и без реактивных
|
||||
фреймворков: копирование infohash (vanilla JS) и раскрытие контекста нативным
|
||||
`<details>`. Все действия над загрузкой SHALL выполняться через формы/htmx
|
||||
(раундтрип на сервер), без клиентского пересчёта доменного состояния.
|
||||
фреймворков: копирование идентификатора загрузки (vanilla JS) и раскрытие
|
||||
контекста нативным `<details>`. Основной копируемый идентификатор в карточке
|
||||
списка и в шапке страницы просмотра SHALL быть `download.id` (ULID) — тот же
|
||||
ключ, что пишется в логи (`download_id`). Все действия над загрузкой SHALL
|
||||
выполняться через формы/htmx (раундтрип на сервер), без клиентского пересчёта
|
||||
доменного состояния.
|
||||
|
||||
#### Scenario: Копирование infohash
|
||||
#### Scenario: Копирование идентификатора загрузки
|
||||
|
||||
- **WHEN** пользователь нажимает кнопку копирования рядом с infohash
|
||||
- **THEN** значение infohash копируется в буфер обмена без перезагрузки
|
||||
- **WHEN** пользователь нажимает кнопку копирования рядом с идентификатором
|
||||
загрузки (`download.id`) в карточке списка или шапке страницы просмотра
|
||||
- **THEN** значение `download.id` копируется в буфер обмена без перезагрузки
|
||||
страницы
|
||||
|
||||
#### Scenario: Раскрытие контекста без JS
|
||||
|
||||
Reference in New Issue
Block a user