Przejdź do głównej zawartości

Zaproszenia

Przegląd

System zaproszeń pozwala pracownikom wysyłać e-maile z zaproszeniami do nowych klientów. Zaproszenie zawiera link rejestracyjny z unikalnym tokenem, ważnym przez 7 dni.


Przepływ

  1. Pracownik otwiera stronę /dashboard/clients i klika Zaproś klienta.
  2. Podaje adres e-mail nowego klienta.
  3. System tworzy zaproszenie w statusie draft.
  4. E-mail zaproszeniowy jest wysyłany (szablon Brevo).
  5. Po udanym wysłaniu → status zmienia się na pending.
  6. Zaproszony klika link → otwiera się /register?invitation=TOKEN.
  7. Po ukończeniu rejestracji i onboardingu → status zmienia się na accepted.

Statusy

StatusOpis
draftUtworzone, e-mail jeszcze nie wysłany
pendingE-mail wysłany, oczekiwanie na rejestrację
acceptedKlient zarejestrował się i ukończył onboarding
expiredToken wygasł (po 7 dniach)

Lista zaproszeń

Dostęp: Tylko rola employee lub admin.

Tabela na stronie /dashboard/clients zawiera historię zaproszeń z kolumnami:

  • E-mail zapraszanego
  • Status (pending / accepted / expired)
  • Data wygaśnięcia
  • Data utworzenia

API

POST /api/invitations

Tworzy i wysyła zaproszenie.

Dostęp: Employee/Admin.

Body:

{
"email": "nowy.klient@example.com"
}
KodOpis
200Zaproszenie wysłane
400Nieprawidłowy email
403Brak uprawnień (nie employee/admin)
409Zaproszenie dla tego emaila już istnieje (i jest aktywne)
500Błąd wysyłania e-maila

GET /api/invitations

Pobiera listę wszystkich zaproszeń posortowaną malejąco po dacie.

Dostęp: Employee/Admin.

Odpowiedź:

[
{
"id": "inv-001",
"email": "klient@example.com",
"status": "pending",
"expiresAt": "2026-04-19T00:00:00.000Z",
"createdAt": "2026-04-12T00:00:00.000Z"
}
]

Bezpieczeństwo

  • Token to UUID v4 (kryptograficznie losowy).
  • Zaproszenie wygasa po 7 dniach.
  • Duplikaty blokowane — nie można wysłać zaproszenia na adres z aktywnym zaproszeniem pending.
  • URL zaproszeniowy walidowany (tylko http: / https: — ochrona przed XSS).
  • W przypadku błędu wysyłki e-maila zaproszenie draft jest natychmiast usuwane.