Prod: expose current project application in program detail - #735
Merged
Merged
Conversation
TThanos3000
marked this pull request as ready for review
September 9, 2026 17:11
This was referenced Sep 9, 2026
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.
Основа и назначение
origin/masterперед началом):d23c555540ccd425e8c3d21bc2c1722cb3361b1b.dd902c0d75abea2a4d7456bb1e247250ec41ad4a.current_applicationнамеренно не используется: production уже имеет самостоятельную модельApplication. Новое поле описывает только legacy Angular flowProject × PartnerProgramProject.Singular
Project.partner_programне является надёжным источником для multi-program Project: ранняя связь с A не должна скрывать заявку того же проекта в запрошенной B.Additive read contract
Существующий
GET /programs/<programId>/всегда возвращает:{ "current_project_application": { "project_id": 123, "program_link_id": 700, "submitted": false } }Либо
"current_project_application": nullдля anonymous, authenticated non-member и member без подходящей legacy-связи.PartnerProgramProject, одновременноpartner_program_id=requested programиproject__leader_id=current user.Project.leader. Collaborator, Invite, TeamMember, настоящая Application,profile.project, singular program и связи других программ не участвуют в определении DTO.PartnerProgramProject.pk. Legacy duplicates не вызывают 500; новый код ничего не создаёт.submittedпередаётся непосредственно из выбранногоPartnerProgramProject.submitted, без новой lifecycle-семантики.Совместимость и scope
Добавлен небольшой typed selector, member-only вызов в detail view, 21 regression-тест и документация контракта.
Не изменены production serializers и прежние поля detail:
application_policy,welcome_acknowledged_at, courses/materials, manager/member flags, dates и остальные поля. Тест сравнивает весь прежний ответ без additive-поля для anonymous/non-member/member.Production Application / Team / Submission / Evaluation и
/applications/,/applications/my/не изменены. Отдельно проверены Application-only, legacy-only, оба одновременно с различающимися project/status, Application другой программы, TeamMember чужой заявки.Не изменены foundation #732/#733/#734: scoped READ/expert filters, cases/canonical fields/admin freeze/access helper, submission metadata. Не изменены apply/submit, fields PUT, permissions, manager-overview. Нет новых endpoints, моделей, migrations, dependencies, Docker/workflow или frontend-изменений.
SQL-бюджет
Warm HTTP detail GET через APIClient, существующий
add_viewоставлен включённым; сравнение exact base → exact head на локальном PostgreSQL:Selector выполняет один фиксированный SQL с тремя колонками,
ORDER BY pk LIMIT 1, включая случаи 0/1/20 подходящих проектов. Нет project-list/pagination scan или N+1. В regression-тестах проверены отсутствие вызова для anonymous/non-member и ровно +1 запрос для member.Проверки exact final head
Локально: Windows, Python 3.11.15, существующее окружение, PostgreSQL 18.1; изолированная test DB. Зависимости и конфигурация окружения проекта не менялись.
manage.py test projects partner_programs --verbosity 1 --noinput: 812 passed, exit 0.manage.py test --verbosity 1 --noinput --keepdb: 1381 passed, exit 0; выделенная test DB удалена после завершения процесса.manage.py check: PASS.manage.py check --tag models: PASS.manage.py makemigrations --check --dry-run: PASS, No changes detected.selectors.pyимеет pre-existing formatting debt в неизменённых participant selectors, воспроизводимый на exact base; он намеренно не переформатирован вне scope.git diff --check HEAD^ HEAD: PASS; рабочее дерево чистое, изменены только четыре заявленных файла.Draft для review. Merge и deploy не выполнялись.