Repository navigation
feat(programs): возврат опубликованной программы в черновик - #846
Merged
Merged
Conversation
12 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Что изменено
Организатор может вернуть опубликованную программу в черновик через новый API. В Django admin добавлено подтверждаемое действие через тот же сервис. Участие, ответы анкет, заявки, сданные решения, оценки и материалы сохраняются.
Зачем
Возврат ранее требовал вручную менять Draft в Django admin. Действие нужно для кнопки в существующем кабинете организатора.
Реализация
Общий сервис блокирует строку программы и меняет только draft и datetime_updated. Устаревшая страница не может скрыть измененную или повторно опубликованную программу. Повтор успешного запроса идемпотентен. Повторная публикация использует существующую проверку готовности.
API
Добавлен POST /programs/{id}/management/unpublish/ с обязательным expected_updated_at. Ответ — обычная management-проекция, draft=true. Ошибки: 400 неверные/лишние поля, 401 без авторизации, 403 чужая опубликованная программа, 404 отсутствующая программа или чужой черновик, 409 stale_settings. Старые endpoints и payload не меняются.
UI
В Django admin добавлены ссылка «Вернуть в черновик» и страница подтверждения с CSRF. GET не меняет данные. Angular — PR #516; API внедряется первым.
Permissions
Существующий manager именно этой программы либо staff/superuser. Право создания не требуется. Admin дополнительно проверяет Django change permission и свой queryset.
Проверки
Acceptance criteria
Выкладка в dev
Deploy Dev завершился успешно. На сервере подтвержден source HEAD
cf48cd7e8cb935d5c70a2f038e57eb3d8c82b3b8и закрепленный runtime image этого коммита.Не проверено
Авторизованный возврат и повторная публикация проверены на локальной реальной связке Angular/Django/PostgreSQL. Авторизованной live dev сессии здесь нет. Production не затронут.
Риски / migration
Миграций нет. Порядок внедрения: API, затем Angular. Возврат скрывает страницу и закрывает участникам доступ по действующим правилам черновиков; сроки не продлевает, прямые ссылки на ранее опубликованные файлы не отзывает.