Skip to content

DEV: возврат стандартной обложки проекта - #350

Merged
TThanos3000 merged 2 commits into
devfrom
feature/dev-project-default-cover-reset-ui
Sep 18, 2026
Merged

TThanos3000 merged 2 commits into
devfrom
feature/dev-project-default-cover-reset-ui

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor

Редактор больше не удаляет обложку через /files/. Для пользовательской обложки доступно «Вернуть стандартную обложку»: project-scoped POST возвращает стандартный URL, форма сразу обновляется и остаётся валидной. У стандартной обложки нет корзины/сброса, загрузка замены сохранена.

Base DEV: c0bbdd7a97f2575864e3d4d8c7d88e927b61bd47

Head: 688e4a8ed2bed0d614a6cb027ec291ae25cdaaf2

Зависимость: backend Draft PROCOLLAB-github/api#743, head d35f9edc5536067db178c3fd1d6a21e13ce4fd9f. Для будущего DEV нужен backend раньше Angular.

Причина и контракт

Подтверждённый пользователем DEV 403 воспроизведён локально на исходном Angular: стандартный UserFile другого владельца → DELETE /files → 403. Удаление собственного файла оставляло пустой обязательный control. Права файлов и Validators.required ослаблять нельзя.

  • POST /projects/{Project.id}/reset-cover/ → 200 {cover_image_address, is_default_cover: true}; ID берётся из инициализированного Project, не из связи с программой.
  • Canonical Project detail возвращает read-only is_default_cover, существующий interceptor преобразует его в isDefaultCover; Angular не угадывает тип по URL/403. Пока флаг неизвестен, сброс недоступен.
  • Backend сохраняет ровно Project write permissions; draft collaborator/invite — по действующим правилам; manager/expert не получают новых прав.
  • Уже default — идемпотентно; нет default — 409 default_cover_unavailable, старый URL и понятная ошибка в UI.
  • Сначала backend сохраняет standard, потом допускает cleanup собственного свободного файла. Чужой/общий/отсутствующий файл не удаляется. Сбой CDN не отменяет reset и не даёт ложный 500.
  • Защищены double click, смена Project/контекста, destroy и параллельная замена. Команда живёт вместе с редактором, поэтому переход между шагами не теряет ответ. Сохранение/сдача блокируются во время reset. Кеш detail инвалидируется и при отмене.
  • Shared UploadFile содержит только нейтральные inputs; presentation DELETE/autosave/explicit empty/offline queue из DEV: fix project file cleanup autosave #349 сохранены. React, current_application, analytics-widget, зависимости, workflows и миграции не менялись.

Уточнение UI

Действие сброса теперь находится внутри рамки обложки: компактная кнопка с подсказкой и aria-label, без текста под блоком. В браузере при 1280 × 720 геометрия обложки, презентации и соседних полей точно совпала с исходной страницей: обложка 319,421875 × 120 px. Custom, pending и default не меняют размеры или координаты. Сброс с клавиатуры проверен. Актуальный скриншот.

После правки: 37/37 targeted, lint:ts, scoped Prettier/Stylelint, build:pr и diff check прошли. Полный suite повторно для HTML/SCSS не запускался; результаты исходной реализации ниже.

Проверки первоначальной реализации

  • Targeted Vitest с --pool=forks --maxWorkers=4 --minWorkers=1: 121/121, 11 файлов, exit 0.
  • Полный Vitest с теми же параметрами: финальный запуск 1642/1642, 370 файлов, exit 0. Два промежуточных запуска имели известный teardown ngx-autosize (window is not defined), без подавления ошибок.
  • npm run test:ci: локальный NG0401 до выполнения тестов, exit 1. Та же ошибка воспроизведена на исходном неизменённом дереве. Успешный forks suite не выдаётся за успешный test:ci. Настройки тестов/CI не менялись.
  • На момент итоговой сверки GitHub не сообщает проверок для Angular PR DEV: возврат стандартной обложки проекта #350; ручной запуск workflow не выполнялся.
  • npm run lint:ts, scoped Prettier, scoped Stylelint, npm run build:pr, git diff --check: успешно; существующие предупреждения ESLint/Sass.
  • Backend: targeted 18/18, регрессии прав 38/38, полный PostgreSQL CI 867/867; все 3 проверки #743 успешны. Локальный нестабильный тест ленты воспроизведён на base и отдельно описан.

Локальная интеграция и ограничения

Настоящие Angular + Django + JWT + отдельная синтетическая PostgreSQL БД. Только транспорт внешнего CDN заменён локальным файловым хранилищем. Выполнены A–F: default без удаления; upload/save/reopen; reset/GET/reopen; чужой файл сохранён; отсутствие default → 409 без потери custom; CDN fail → standard остаётся. Дополнительно проверен переход между шагами во время запроса. Кейс программной связи и обычное сохранение сохранились.

Новая UI-цепочка не отправляла DELETE /files и /projects/NaN/, /0/, /null/; 5xx не было. Ожидаемые 409 и 401 обновления локальной сессии не скрыты. Presentation deletion проверен тестами; повторного удаления презентации в браузере этой задачи не выполнялось. Живой DEV, реальные пользовательские данные и настоящий Selectel не использовались.

Полный отчёт, команды и ограничения · Сетевые ответы/GET readback · Скриншоты

Только Draft PR → dev. Merge/deploy не выполнять.

@TThanos3000
TThanos3000 marked this pull request as ready for review September 18, 2026 09:02
@TThanos3000
TThanos3000 merged commit 2324f52 into dev Sep 18, 2026
@TThanos3000
TThanos3000 deleted the feature/dev-project-default-cover-reset-ui branch September 18, 2026 09:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants