Skip to content

DEV: сброс обложки проекта на стандартную - #743

Merged
TThanos3000 merged 1 commit into
devfrom
feature/dev-project-default-cover-reset-api
Sep 18, 2026
Merged

TThanos3000 merged 1 commit into
devfrom
feature/dev-project-default-cover-reset-api

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Sep 17, 2026 •

Copy link
Copy Markdown
Collaborator

При сбросе обложки Angular сейчас пытается удалить файл через /files/: стандартный чужой UserFile даёт 403, а очистка пользовательской обложки конфликтует с обязательным полем формы. Этот PR добавляет POST /projects/{id}/reset-cover/: сначала сохраняется стандартная обложка, затем допускается очистка прежнего собственного файла. UI-часть: Angular Draft PR #350, head 688e4a8ed2bed0d614a6cb027ec291ae25cdaaf2.

Base DEV: 8ed5670d2123dd1f1b53668567ad60bde8641bcc

Head: d35f9edc5536067db178c3fd1d6a21e13ce4fd9f

Контракт и безопасность

  • 200: {cover_image_address: "фактический URL", is_default_cover: true}. Уже стандартная обложка возвращается идемпотентно.
  • Нет доступной DefaultProjectCover: 409 с code=default_cover_unavailable, без изменения проекта.
  • Canonical Project detail содержит read-only is_default_cover; один запрос к набору стандартных URL на экземпляр сериализатора, включая many=True.
  • Используется тот же объект ProjectDetail.permission_classes: права лидера, draft collaborator/invite, опубликованного проекта и временное ограничение программы сохранены. Менеджер/эксперт не получают write из-за роли.
  • Очистка только после commit; собственный свободный UserFile можно удалить, чужой/системный/используемый другим проектом сохраняется. Отсутствующий файл не мешает reset. Сбой CDN не отменяет успешный reset и не превращает его в 500; лог без URL и текста исключения.
  • Глобальный DELETE /files/, Project.save(), React, current_application, analytics-widget, зависимости, миграции и workflows не менялись.

Проверки

  • Новые targeted: 18/18, exit 0; вместе с регрессиями прав: 38/38, exit 0.
  • Локальный полный PostgreSQL suite: 867 тестов, 1 failure существующего теста ленты (project != news). На неизменённой базе полный suite 849/849; в 30 повторах того же теста на базе получены 2 идентичных failures. Нестабильность подтверждена вне PR, не подавлялась. Штатный GitHub PostgreSQL CI прошёл: 867/867, OK. Все три проверки PR успешны: Backend PostgreSQL CI, Lint и Tests.
  • manage.py check, check --tag models, makemigrations --check --dry-run: успешно, миграций нет.
  • Black/flake8 изменённых Python-файлов и settings_ci, git diff --check: успешно.

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

Настоящие Angular + Django + отдельная синтетическая PostgreSQL БД, внешний CDN заменён только локальным файловым транспортом. A–F выполнены: стандартная обложка без удаления; upload/save/reopen; reset/GET/reopen; чужой UserFile сохранён; отсутствие default даёт 409 и сохраняет URL; отказ CDN даёт успешный reset на default. Успешный reset собственного файла удаляет его только после смены ссылки. В UI-цепочке нет DELETE /files, NaN/0/null project IDs или 5xx.

DEV 403 — подтверждение пользователя; автор PR не выполнял удаления на живом DEV. Дополнительно исходный Angular в локальном браузере воспроизвёл DELETE стандартного чужого UserFile → 403. Скриншоты и сетевые ответы приложены в Angular PR. Настоящий Selectel и живые пользовательские данные не использовались.

Подробности: документация. Для будущего DEV-развёртывания backend нужен раньше Angular. Только Draft PR; merge/deploy не выполнять.

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