Skip to content

PROD: синхронизировать статус сдачи в списке проектов - #749

Merged
TThanos3000 merged 1 commit into
masterfrom
release/prod-project-card-lifecycle
Sep 21, 2026
Merged

TThanos3000 merged 1 commit into
masterfrom
release/prod-project-card-lifecycle

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Sep 21, 2026

Copy link
Copy Markdown
Collaborator

Список «Мои проекты» теперь возвращает статус сдачи той же legacy-связи, что и detail: сданный проект больше не выглядит редактируемым из-за сокращённого ответа списка. Перенесены только контракт и загрузка связей из DEV #748; целиком DEV не сливается.

Точные ревизии

  • PROD base: a5cdf03a8eef391671c92ccea439e52d4df7cb4f.
  • Release head: b65f1a97fbc08a0a947cba2e43cccc9ba89bad17.
  • Source: DEV #748, head 2651a1f5e8ea168a9e1fbc193b0bc07fa8f33027, merge 19458b68e16d71741f4aeed1d2510d673cfbd3e2.

Контракт и границы

В GET /auth/users/projects/ и /auth/users/projects/leader/ поле partner_program содержит только id, name, program_link_id, program_id, is_submitted; при отсутствии связи — null. id остаётся ID программы. Тяжёлые поля программы не добавлены.

Для лидера и collaborator выбирается связь с минимальным PartnerProgramProject.pk. Ordered Prefetch использует JOIN программы и учитывает пустой кеш без лишнего SELECT. Существующее PROD-ограничение eligible links для пользователей с доступом только через роль программы в detail сохранено; permissions не расширены.

Angular получает partnerProgram.isSubmitted через настоящий CamelcaseInterceptor. Связанный Angular Draft PR #363 использует этот контракт; для будущего релиза backend следует развернуть первым, после отдельного разрешения.

Изменены только:

  • users/serializers.py;
  • users/views.py;
  • users/tests/test_project_list_program_contract.py;
  • docs/prod-project-card-port.md.

PROD social_links, throttling, detail, submission logic, current_application и React-домен не изменены. Миграций нет. Зависимости, lockfile, test setup и workflows не изменены. DEV не менялся.

Проверки

  • Targeted PostgreSQL: 40/40, exit 0. Команда: python manage.py test users.tests.test_project_list_program_contract users.tests.test_user_lists_api projects.tests.test_program_project_detail_access projects.tests.test_project_access partner_programs.tests.test_program_project_submit partner_programs.tests.test_program_detail --verbosity 1 --keepdb --noinput.
  • Query count при 1 → 31 проектах: 3 → 3 для обоих списков при прогретом существующем кеше просмотров. Сериализация заполненного/пустого prefetch-кеша: 0 запросов; fallback без кеша: 1. Старые cache miss в get_views_count не менялись, холодный кеш этой метрики не входит в утверждение об отсутствии нового N+1.
  • Полный PostgreSQL suite: 1568 тестов, OK (skipped=3), exit 0, 872.187 s. Команда: python manage.py test --verbosity 1 --keepdb --noinput; отдельные локальные settings/БД, полный Nextgen surface включён только для тестирования сохранённых контрактов.
  • Отдельная quarantine-проверка с отключённым Nextgen: 16 тестов, OK, 2 штатных skip, exit 0.
  • python manage.py check, python manage.py makemigrations --check --dry-run, Black для изменённых Python-файлов, Flake8 по всем tracked/new Python-файлам и git diff --check: exit 0.

Тесты использовали отдельную локальную PostgreSQL БД. Авторизованная live-проверка PROD не выполнялась; для неё после отдельно согласованного deploy нужно сравнить list/detail одного тестового сданного проекта. Это Draft PR: merge и deploy не выполнялись.

@TThanos3000
TThanos3000 marked this pull request as ready for review September 21, 2026 21:59
@TThanos3000
TThanos3000 merged commit db80d2c into master Sep 21, 2026
6 checks passed
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