Skip to content

Add team invitation flow#663

Merged
TThanos3000 merged 1 commit into
masterfrom
feature/team-invites-api
Jul 22, 2026
Merged

Add team invitation flow#663
TThanos3000 merged 1 commit into
masterfrom
feature/team-invites-api

Conversation

@TThanos3000

Copy link
Copy Markdown
Collaborator

Что изменено

Добавлен MVP-сценарий приглашения зарегистрированных пользователей платформы в команду заявки.

Реализованы:

  • модель TeamInvite;
  • создание и просмотр приглашений команды;
  • просмотр собственных приглашений пользователя;
  • принятие, отклонение и отзыв приглашения;
  • создание или восстановление TeamMember только после принятия приглашения;
  • сохранение истории приглашений и членства;
  • проверки регистрации, дедлайна, конфликтов участия и вместимости команды;
  • атомарные операции с блокировками связанных объектов;
  • идемпотентная обработка повторных запросов;
  • автоматический отзыв других pending-приглашений пользователя в команды той же программы после принятия одного приглашения;
  • локальное ограничение частоты mutation-запросов.

Существующий invites.Invite не используется, поскольку относится к legacy-приглашениям в Project.

Модель

Добавлена модель TeamInvite со статусами:

  • pending;
  • accepted;
  • declined;
  • revoked.

Добавлена условная уникальность одного активного pending-приглашения для пары team + user.

Завершенные приглашения не удаляются. После accepted, declined или revoked пользователь может быть приглашен повторно.

Endpoints

  • GET /applications/<application_id>/team/invites/
  • POST /applications/<application_id>/team/invites/
  • GET /team-invites/my/
  • POST /team-invites/<invite_id>/accept/
  • POST /team-invites/<invite_id>/decline/
  • POST /team-invites/<invite_id>/revoke/

Основные правила

  • приглашения создаются только для существующих пользователей платформы;
  • приглашать может капитан команды или staff;
  • менеджер программы не может управлять приглашениями;
  • приглашенный пользователь должен быть зарегистрирован в программе;
  • pending-приглашение не дает доступа к Application, Team или Submission;
  • pending-приглашение не считается участником при отправке заявки;
  • принять приглашение можно только пока Application находится в draft и не истек отдельный дедлайн подачи заявки;
  • принятый пользователь получает роль обычного участника и read-only доступ;
  • существующий исторический TeamMember восстанавливается без создания дубликата;
  • первоначальный joined_at сохраняется;
  • pending-приглашения блокируют переход заявки из командного формата в индивидуальный;
  • Project, projects.Collaborator, капитан и владелец Application при принятии приглашения не изменяются.

Миграция

Добавлена миграция:

  • 0022_teaminvite_teaminvite_uniq_pending_invite_team_user

Миграцию необходимо применить при обновлении React-dev backend после merge.

Throttling

Добавлены независимые scopes с ограничением 20/min:

  • team_invite_create;
  • team_invite_accept;
  • team_invite_decline;
  • team_invite_revoke.

GET endpoints отдельно не ограничиваются.

Документация

Добавлен документ:

  • docs/team-invites-api.md

Также обновлена актуальная документация доменной модели, сервисов, политик доступа и Team API.

Проверки

  • 35 изолированных TeamInvite-тестов — успешно;
  • 420 regression-тестов partner_programs, projects и legacy invites — успешно;
  • makemigrations --check --dry-run — изменений нет;
  • migrate --plan — успешно;
  • manage.py check — успешно;
  • py_compile — успешно;
  • строгий flake8 измененных файлов — успешно;
  • git diff --check — успешно.

Глобальный flake8 сохраняет 29 ранее существовавших ошибок в файлах, не относящихся к этому PR.

Не входит в PR

  • приглашения по email;
  • токены и ссылки-приглашения;
  • срок действия приглашений;
  • письма и уведомления;
  • поиск пользователей;
  • frontend;
  • изменения Project и projects.Collaborator;
  • изменения жизненного цикла Submission;
  • organizer review и решения по Application;
  • настройки окружения;
  • Docker, nginx, workflows и deploy.

@TThanos3000
TThanos3000 merged commit 7b39052 into master Jul 22, 2026
2 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.

1 participant