Skip to content

Приглашения

Система приглашений позволяет добавлять пользователей в организации и команды.

Модель

Invitation
├── email (приглашённый пользователь)
├── roleId (роль, которая будет назначена)
├── organizationId? (опционально)
├── teamId? (опционально)
├── token (уникальный JWT-токен)
├── status: pending | accepted | declined | cancelled | expired
└── expiresAt (срок действия)

API Endpoints

МетодПутьAuthОписание
POST/api/invitationsДаСоздать приглашение
GET/api/invitations/myДаМои ожидающие приглашения
GET/api/invitations/pendingНетНайти ожидающие (?teamSlug=&orgSlug=)
POST/api/invitations/:id/acceptДаПринять приглашение
POST/api/invitations/:id/declineДаОтклонить приглашение
DELETE/api/invitations/:id/cancelДаОтменить приглашение

Процесс приглашения

  1. Создание: Пользователь с правом members.invite создаёт приглашение на email
  2. Доставка: Если пользователь с таким email уже существует — он получает уведомление. Если нет — отправляется email со ссылкой
  3. Анонимный flow: Неавторизованный пользователь переходит по ссылке → видит данные приглашения через GET /invitations/pending/:token → регистрируется → приглашение автоматически принимается
  4. Принятие: Пользователь добавляется в организацию/команду с указанной ролью, добавляется в чат команды
  5. Уведомления: Пригласитель получает уведомление о принятии

Фронтенд

Store приглашений

typescript
const store = useInvitationsStore()
const { myInvitations } = storeToRefs(store)

await store.fetchMy()
await store.create({ email, roleId, organizationId?, teamId? })
await store.accept(id)
await store.decline(id)
await store.cancel(id)

Ключевые детали реализации

  • Приглашения используют JWT-токены для безопасной анонимной ссылки
  • При регистрации пользователя все ожидающие приглашения на его email автоматически принимаются
  • Нельзя пригласить пользователя, который уже является участником
  • Приглашения имеют срок действия (expiresAt)