You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/case-championship-domain.md
+14-10Lines changed: 14 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -48,16 +48,18 @@ Program
48
48
**Связи.** Имеет регистрации, заявки и сдачи; связывается с менеджерами,
49
49
экспертами, курсами, материалами и legacy-проектами.
50
50
51
-
**Что хранит.** Описание и изображения, даты начала и завершения, дедлайны
52
-
регистрации, legacy-дедлайн подачи проектов и дедлайн оценки, схему
53
-
регистрационных данных, настройки конкурсности и доступности проектов.
51
+
**Что хранит.** Описание и изображения, даты начала и завершения, дедлайн
52
+
регистрации, отдельный дедлайн Application, legacy-дедлайн подачи проектов и
53
+
дедлайн оценки, схему регистрационных данных, настройки конкурсности,
54
+
доступности проектов, формата участия и размера команды.
54
55
55
56
**Что не должна хранить.** Ответы конкретного участника, состав команды,
56
57
решение или оценку конкретной работы.
57
58
58
59
**Текущее состояние.** Реализована как `partner_programs.PartnerProgram`.
59
-
Специальных настроек формата участия, минимального/максимального размера
60
-
команды, дедлайна заявки и отдельного дедлайна решения пока нет.
60
+
Формат участия, минимальный/максимальный размер команды и отдельный дедлайн
61
+
Application хранятся в модели и защищены validation/constraints. Enforcement
62
+
в Application/team service и отдельный дедлайн решения пока отсутствуют.
61
63
62
64
### Registration
63
65
@@ -615,6 +617,7 @@ Registration.
615
617
| Область | Уже реализовано | Частично | Отсутствует | Комментарий |
616
618
|---|---|---|---|---|
617
619
| Registration |`PartnerProgramUserProfile`, register endpoints, `participating=1`, deadline и uniqueness | Статус Registration и связь с новым flow | Отдельная модель/явный contract Registration | Application create не требует Registration |
620
+
| Program participation policy | Форматы `individual_only/team_only/individual_or_team`, размеры Team, application deadline, model/DB validation и admin | Helpers пока вызываются только явно | Enforcement в Application/team service и публичный API | Default `individual_only`, размеры и deadline существующих программ остаются `null`|
618
621
| Application model | Program, user, created_by, participation_mode, form_data, nullable Project, timestamps, partial unique constraint | Ownership по-прежнему опирается на Application.user | returned, snapshot, review reason | Default participation_mode временно individual |
619
622
| Application API | create/my/detail/patch/submit/withdraw, idempotency create/submit/withdraw, scoped throttle create | Owner/staff access | review endpoints, manager access, deadline/form/team checks | 404 my application корректно означает отсутствие записи |
620
623
| Application statuses | Шесть статусов и timestamps submit/approve/reject/withdraw | Переходы draft/submit/withdraw |`returned`, return/approve/reject/cancel actions | approved/rejected могут появиться только вне нового API, например через admin |
@@ -628,7 +631,7 @@ Registration.
628
631
| Notification | Email и chat WebSocket infrastructure | Mailing logs не являются inbox | Доменная Notification и пользовательский центр | Не входит в первый Team PR |
629
632
| Evaluation |`Criteria`, `ProjectScore`, `ProjectExpertAssignment` для legacy Project | Эксперты и распределенное оценивание проекта | Evaluation по Submission | Нельзя смешивать с ProjectScore без миграции |
630
633
| Result | Legacy scores и пользовательские достижения существуют отдельно | Нет единого результата заявки | Result/ranking/publication contract | Требует решения об источнике итогов |
631
-
| Deadlines | Registrationи legacy project submission/evaluation dates |Поля Program можно переиспользовать только после решения semantics | Проверки в Application/Submission API, отдельные application/solution deadlines|Сейчас новый flow позволяет действия после дедлайнов|
634
+
| Deadlines | Registration, отдельный Application deadline и legacy project submission/evaluation dates |Application helper не подключен к endpoints | Проверки в Application/Submission API и отдельный solution deadline|Application deadline не имеет fallback на legacy-поля|
632
635
| Permissions | Owner/staff для новых API; manager/expert permissions есть для legacy flow | Staff имеет расширенный доступ | Captain/member, manager и expert permissions для новых сущностей | Нужен общий domain permission layer |
633
636
| Constraints | Registration uniqueness; active individual Application; Team one-to-one/member/captain constraints; Submission version; Project collaborators | Captain/member validation есть только внутри одной Team | Cross-team active participation и team size | Cross-table race требует транзакционного service |
634
637
| Admin | PartnerProgram, Registration, Application, Team, TeamMember, Submission, Project, Invite и legacy evaluation зарегистрированы | Admin позволяет ручную диагностику | TeamInvite/Evaluation admin | Admin не заменяет transition services |
@@ -683,12 +686,12 @@ Registration.
683
686
| Team и TeamMember | Модели, admin, constraints и tests реализованы | Добавить транзакционный service и публичный API | P0 | Application/team invariants |
684
687
| Только зарегистрированный создает Application | Не проверяется | Domain service должен проверять PartnerProgramUserProfile | P0 | Application eligibility and lifecycle |
685
688
| Одна активная заявка на пользователя с учетом Team | Constraint покрывает только `Application.user`| Транзакционная проверка индивидуальных и командных участий | P0 | Application/team invariants |
686
-
| Валидация команды перед submit |Есть модель Team, но нет program policy/service | Настройки формата/размера Program и submit validation | P0 |Program participation policy|
689
+
| Валидация команды перед submit | Team и Program policy реализованы | Транзакционная проверка accepted-состава и формата перед submit | P0 |Application/team invariants|
687
690
| Captain-only actions | Captain хранится, endpoints Team не учитывают | Team-aware permissions для Application и Submission | P0 | Team permissions |
688
691
| Team API | Отсутствует | CRUD ограниченного MVP, members, leave/transfer captain | P1 | Team API |
689
692
| Полный lifecycle Application | Нет returned/review actions | Добавить return/approve/reject/cancel с reason/audit | P1 | Application review API |
690
693
| TeamInvite | Есть только Project Invite | Отдельные token/email/user invites и идемпотентный accept | P1 | TeamInvite model and API |
691
-
| Application deadlines |Новый API их не проверяет |Зафиксировать поля Program и проверять create/edit/submit/withdraw | P0 | Application eligibility and lifecycle |
694
+
| Application deadlines |Отдельное поле и helper Program реализованы, API их не проверяет |Проверять create/edit/submit/withdraw без fallback на legacy deadlines| P0 | Application eligibility and lifecycle |
692
695
| Submission deadlines и роли | Новый API не проверяет сроки, manager/expert/team | Добавить policy и единый permission layer | P1 | Submission lifecycle hardening |
693
696
| Return/finalize Submission | Статусы есть, действий нет | Организаторские endpoints и audit fields/reasons | P1 | Submission review API |
694
697
| Semantics версий Submission | Несколько записей и auto-next уже есть | Определить current/final/evaluated version и поведение after return | P1 | Submission version workflow |
0 commit comments