Przejdź do treści

Powiadomienia (Notification)

Ostatnia aktualizacja dokumentacji: 26 lutego 2026 Stan synchronizacji z kodem: Zsynchronizowany


1. Opis ogolny

Domena Powiadomien odpowiada za automatyczne informowanie uzytkownikow o zdarzeniach w systemie. To jak sekretarka, ktora wysyla wszystkie potwierdzenia — od utworzenia rezerwacji, przez platnosc, az po prosbe o opinie.

System obsluguje 39 typow powiadomien rozproszonych po 11 domenach biznesowych, z centralnym mechanizmem wysylania opartym na kolejkach. Kazde powiadomienie wysylane jest asynchronicznie i zapisywane w bazie danych.

Kanaly komunikacji:

  • Email — sformatowane wiadomosci HTML z przyciskiem akcji
  • Baza danych — zapis do odczytu w panelu administratora

2. Architektura domeny

2.1 Modele danych

Notification

Model glowny rozszerzajacy DatabaseNotification. Wykorzystuje UUID jako klucz glowny.

Pole Typ Opis
id UUID Klucz glowny
type string Pelna nazwa klasy powiadomienia
notifiable_type string (nullable) Typ polimorficzny encji (np. User)
notifiable_id UUID (nullable) ID encji polimorficznej
data JSON Dane powiadomienia (subject, content)
event_created_at datetime (nullable) Czas utworzenia zdarzenia
event_send_at datetime (nullable) Czas wyslania zdarzenia
event text (nullable) Serializacja zdarzenia
read_at timestamp (nullable) Czas oznaczenia jako przeczytane
created_at timestamp Czas utworzenia
updated_at timestamp Czas aktualizacji

Cechy modelu:

  • Uzywa traitu HasUuids — automatyczne generowanie UUID
  • Obserwowany przez NotificationObserver (obecnie pusty — placeholder)
  • Relacja polimorficzna notifiable() (MorphTo) — moze wskazywac na dowolny model
  • Casty dat: format Y-m-d H:i:s
  • Activity log wylaczony (dontSubmitEmptyLogs)

DatabaseNotification (klasa bazowa)

Rozszerza CustomModel, dostarcza metody zarzadzania stanem odczytu:

Metoda Typ Opis
markAsRead() void Ustawia read_at na biezacy czas
markAsUnread() void Czysci read_at (ustawia null)
read() bool Sprawdza czy powiadomienie jest przeczytane
unread() bool Sprawdza czy powiadomienie jest nieprzeczytane
scopeRead() Builder Filtruje przeczytane powiadomienia
scopeUnread() Builder Filtruje nieprzeczytane powiadomienia

2.2 Diagram relacji

classDiagram
    class Notification {
        +UUID id
        +string type
        +string notifiable_type
        +UUID notifiable_id
        +JSON data
        +timestamp read_at
        +markAsRead()
        +markAsUnread()
        +read() bool
        +unread() bool
    }

    class CustomNotification {
        +string subject
        +string content
        +array action
        +via() array
        +toMail() MailMessage
        +toArray() array
    }

    class SendNotification {
        +__invoke(user, channel, mail, class, params)
    }

    class SimpleSendNotification {
        +__invoke(channel, mails, class, params)
    }

    class SendNotificationJob {
        +handle()
    }

    Notification --|> DatabaseNotification : extends
    CustomNotification --|> LaravelNotification : extends
    SendNotification --> Notification : creates record
    SimpleSendNotification --> SendNotificationJob : dispatches
    SendNotificationJob --> SendNotification : calls

2.3 Struktura tabel w bazie danych

Tabela: notifications

Migracja: 0001_01_01_000009_create_notifications.php

Kolumna Typ Nullable Default Opis
id uuid Nie auto Klucz glowny UUID
type string Nie Pelna klasa powiadomienia
notifiable_type string Tak null Typ polimorficzny
notifiable_id uuid Tak null ID polimorficzne
data text (JSON) Nie Payload: subject + content
event_created_at datetime Tak null Czas zdarzenia
event_send_at datetime Tak null Czas wyslania
event text Tak null Serializacja eventu
read_at timestamp Tak null Czas odczytu
created_at timestamp Nie auto Czas utworzenia
updated_at timestamp Nie auto Czas aktualizacji

3. Endpointy API

Wszystkie endpointy wymagaja uwierzytelnienia (auth:api) i jednej z rol: ADMIN, SUPERVISOR, EMPLOYEE.

3.1 Lista powiadomien

GET /api/notifications

  • Opis: Pobiera liste powiadomien z filtrowaniem i paginacja
  • Autoryzacja: ADMIN widzi wszystkie powiadomienia; SUPERVISOR/EMPLOYEE widza tylko swoje (filtrowane po notifiable_type = User i notifiable_id = auth_id)
  • Controller: NotificationController@indexIndexNotificationController
  • Request: IndexNotificationControllerRequest

Query Parameters:

Parametr Typ Opis
filter[notifiable_type] string Filtr dokladny — typ encji
filter[notifiable_id] string Filtr dokladny — ID encji
filter[data->subject] string Filtr czesciowy — temat powiadomienia
filter[data->content] string Filtr czesciowy — tresc powiadomienia
filter[notifiable.email] string Filtr czesciowy — email odbiorcy
page integer Numer strony
per_page integer Liczba elementow na stronie

Walidacja (FormRequest):

Reguly paginacji dziedziczone z paginationDefaultRequestRules() (TraitSupport).

Response (sukces — 200):

{
  "data": [
    {
      "id": "uuid-string",
      "type": "ReservationCreatedNotification",
      "notifiable_type": "User",
      "notifiable_id": "uuid-string",
      "data": {
        "subject": "Potwierdzenie rezerwacji nr ABC123",
        "content": "<p>Dziekujemy za dokonanie rezerwacji...</p>"
      },
      "can_be_edit": true,
      "read_at": "2026-02-26 10:30:00",
      "created_at": "2026-02-26 10:00:00",
      "updated_at": "2026-02-26 10:30:00"
    }
  ],
  "meta": { "current_page": 1, "per_page": 15, "total": 42 }
}

Relacje ladowane: notifiable


3.2 Oznacz wszystkie jako przeczytane

PATCH /api/read-notifications

  • Opis: Oznacza wszystkie nieprzeczytane powiadomienia zalogowanego uzytkownika jako przeczytane
  • Autoryzacja: ADMIN, SUPERVISOR, EMPLOYEE
  • Controller: NotificationController@readReadNotificationController
  • Body: Brak

Response (sukces — 200):

{
  "message": "Notifications have been successfully updated",
  "status": 200
}

3.3 Oznacz pojedyncze jako przeczytane

PATCH /api/notifications/{notificationId}/set-read

  • Opis: Oznacza konkretne powiadomienie jako przeczytane
  • Autoryzacja: ADMIN, SUPERVISOR, EMPLOYEE
  • Controller: NotificationController@setReadReadNotificationController
  • Parametry URL: notificationId (UUID)

Response (sukces — 200):

{
  "message": "Notifications have been successfully updated",
  "status": 200
}

4. Logika biznesowa

4.1 Glowne procesy

Proces wysylania powiadomienia

sequenceDiagram
    participant D as Domena (Akcja/Observer)
    participant T as TraitSupport
    participant J as SendNotificationJob
    participant Q as Kolejka (notifications)
    participant S as SendNotification
    participant N as CustomNotification
    participant M as Mail
    participant DB as Baza danych

    D->>T: sendNotification(user, channel, mail, class, params)
    T->>J: dispatch(...).onQueue('notifications')
    J-->>Q: Zadanie w kolejce
    Q->>S: __invoke(user, channel, mail, class, params)
    S->>S: shouldSkipReservationNotification?
    alt Pomijanie wlaczone
        S-->>S: return (nie wysyla)
    end
    S->>N: new NotificationClass(...params)
    alt Uzytkownik istnieje
        S->>N: user->notify(notification)
        N->>M: toMail() — email HTML
        N->>DB: toArray() — zapis do tabeli notifications
    else Brak uzytkownika (np. klient bez konta)
        S->>N: Notification::route(channel, mail)->notify()
        S->>S: getNotifiableFromParamsNotification()
        S->>DB: Notification::create() — reczny zapis
    end

Proces masowego wysylania (SimpleSendNotification)

Uzywany np. przy aktualizacji dokumentow prawnych (wysylka do wszystkich klientow):

sequenceDiagram
    participant A as Akcja domenowa
    participant SS as SimpleSendNotification
    participant J as SendNotificationJob
    participant Q as Kolejka

    A->>SS: __invoke(channel, [emails], class, params)
    loop Dla kazdego emaila
        SS->>J: dispatch(user, channel, email, class, params)
        J-->>Q: Zadanie w kolejce
    end

4.2 Reguly biznesowe

  1. Asynchronicznosc — wszystkie powiadomienia wysylane sa przez kolejke notifications, nie blokuja uzytkownika
  2. Pomijanie powiadomien — rezerwacje z flaga send_notifications = false pomijaja wysylke powiadomien rezerwacyjnych i reklamacyjnych
  3. Kontrola dostepu — administratorzy widza wszystkie powiadomienia; pozostale role widza tylko swoje
  4. Kanaly — domyslnie ['mail', 'database']; niektore powiadomienia nadpisuja na ['mail'] (np. PinApprovedNotification)
  5. Automatyczne czyszczenie — powiadomienia starsze niz REMOVE_NOTIFICATIONS_OLDER_THAN_DAYS dni sa usuwane przez komende CRON
  6. Polimorfizm — powiadomienia moga byc przypisane do dowolnego modelu przez notifiable_type / notifiable_id
  7. Zapis dla klientow bez konta — jesli odbiorca nie ma konta User, system recznie tworzy rekord w tabeli notifications z odpowiednim notifiable_type i notifiable_id

4.3 Mechanizm pomijania powiadomien (Skip Logic)

Klasa ShouldSkipReservationNotification sprawdza:

  • Dla powiadomien z Domain\Reservation\Notification\ — czy rezerwacja ma send_notifications = false
  • Dla powiadomien z Domain\Complaint\Notification\ — czy powiazana rezerwacja ma send_notifications = false

Jesli warunek spelniony — powiadomienie nie jest wysylane.

4.4 Walidacje

IndexNotificationControllerRequest

Pole Reguly
Paginacja paginationDefaultRequestRules() — standardowe reguly paginacji z TraitSupport

Autoryzacja: authorize() zwraca true — kontrola dostepu realizowana na poziomie middleware (role) i w akcji kontrolera (filtrowanie per uzytkownik).


5. Autoryzacja i uprawnienia

Akcja ADMIN SUPERVISOR EMPLOYEE Klient
Lista powiadomien (wszystkie)
Lista powiadomien (swoje)
Oznacz jako przeczytane
Oznacz pojedyncze jako przeczytane

Klienci a powiadomienia

Klienci otrzymuja powiadomienia email, ale nie maja dostepu do API powiadomien w panelu. Powiadomienia dla klientow sa zapisywane w bazie z notifiable_type wskazujacym na model domenowy (np. Reservation, Complaint).


6. Typy powiadomien

System zawiera 39 typow powiadomien rozproszonych po 11 domenach:

6.1 Rezerwacje (18 powiadomien)

Klasa Kiedy wysylane Odbiorca Kanaly
ReservationCreatedNotification Po zlozeniu rezerwacji Klient mail, database
ReservationEmailConfirmationNotification Weryfikacja adresu email Klient mail, database
ReservationPaymentPendingNotification Po potwierdzeniu email — oczekiwanie na platnosc Klient mail, database
ReservationPaymentConfirmedNotification Po oplaceniu rezerwacji Klient mail, database
ReservationPaymentFailedNotification Po nieudanej platnosci P24 Klient mail, database
ReservationPaymentReminderNotification Przypomnienie przed terminem platnosci Klient mail, database
ReservationPriceConfirmedNotification Po zatwierdzeniu ceny Klient mail, database
ReservationCancelledNotification Po anulowaniu rezerwacji Klient mail, database
ReservationCancelledDueToItemBlockNotification Obiekt zablokowany — automatyczne anulowanie Klient mail, database
ReservationCancelledDueToActivityCancellationNotification Anulowanie zajec — automatyczne anulowanie Klient mail, database
ReservationRefundProcessedNotification Po przetworzeniu zwrotu Klient mail, database
RefundConfirmationNotification Potwierdzenie zwrotu z PDF Klient mail, database
ReservationReceiptNotification Rachunek za platnosc z PDF Klient mail, database
ReservationReminderNotification Dzien przed terminem rezerwacji Klient mail, database
ReservationReviewReminderNotification Po zakonczeniu rezerwacji — prosba o opinie Klient mail, database
NewReservationForItemManagerNotification Nowa rezerwacja obiektu Manager obiektu mail, database
NewParticipantForTrainerNotification Nowy uczestnik zajec Trener mail, database
SlotCancelledForManagerNotification Anulowanie slotu — alert dla managera Manager obiektu mail, database

Zalaczniki PDF

ReservationReceiptNotification generuje rachunek PDF przez ReceiptGenerator. RefundConfirmationNotification generuje potwierdzenie zwrotu PDF przez RefundConfirmationGenerator.

6.2 Uzytkownicy (5 powiadomien)

Klasa Kiedy wysylane Odbiorca Kanaly
UserWelcomeNotification Utworzenie konta pracownika Nowy uzytkownik mail, database
UserOneTimePasswordNotification Logowanie z kodem OTP Uzytkownik mail, database
UserResetPasswordNotification Prosba o reset hasla Uzytkownik mail, database
UserSecurityAlertNotification Wykrycie zagrozenia (ponowne uzycie tokena, niezgodnosc fingerprintu) Uzytkownik mail, database
UserNewLoginNotification Logowanie z nowego urzadzenia (IP, przegladarka, czas) Uzytkownik mail, database

6.3 Reklamacje (4 powiadomienia)

Klasa Kiedy wysylane Odbiorca Kanaly
ComplaintCreatedNotification Po zlozeniu reklamacji Klient + Supervisor mail, database
ComplaintUpdatedNotification Po zmianie statusu reklamacji Klient mail, database
ComplaintMessageCreatedNotification Nowa wiadomosc w watku Klient lub Supervisor mail, database
ComplaintNewSupervisorNotification Przypisanie nowego opiekuna Supervisor mail, database

6.4 Dostep PIN (3 powiadomienia)

Klasa Kiedy wysylane Odbiorca Kanaly
PinRequestSubmittedNotification Po zlozeniu wniosku o PIN Wnioskodawca mail, database
PinApprovedNotification Po zatwierdzeniu — z kodem PIN Wnioskodawca mail (bez database)
PinRejectedNotification Po odrzuceniu wniosku Wnioskodawca mail, database

Wyjatkowy kanal

PinApprovedNotification nadpisuje via() na ['mail'] — PIN nie jest zapisywany w bazie danych powiadomien ze wzgledow bezpieczenstwa.

6.5 Organizacje (2 powiadomienia)

Klasa Kiedy wysylane Odbiorca Kanaly
OrganizationEmployeeCreatedNotification Przypisanie pracownika do organizacji Pracownik mail, database
OrganizationEmployeeDeletedNotification Usuniecie pracownika z organizacji Pracownik mail, database

6.6 Obiekty (2 powiadomienia)

Klasa Kiedy wysylane Odbiorca Kanaly
ItemManagerCreatedNotification Przypisanie managera obiektu Manager mail, database
ItemManagerDeletedNotification Usuniecie managera obiektu Manager mail, database

6.7 Raporty (1 powiadomienie)

Klasa Kiedy wysylane Odbiorca Kanaly
ReportGeneratedNotification Zakonczenie generowania raportu Zlecajacy mail, database

Zalacznik CSV

ReportGeneratedNotification dolacza plik CSV z wynikami raportu do wiadomosci email.

6.8 Dokumenty prawne (1 powiadomienie)

Klasa Kiedy wysylane Odbiorca Kanaly
LegalDocumentUpdatedNotification Aktualizacja regulaminu/polityki Wszyscy klienci mail, database

6.9 Tryb aplikacji (1 powiadomienie)

Klasa Kiedy wysylane Odbiorca Kanaly
ChangeAppModeNotification Przelaczenie trybu dev/prod Administrator mail, database

6.10 Zadania kolejek (1 powiadomienie)

Klasa Kiedy wysylane Odbiorca Kanaly
JobErrorNotification Niepowodzenie zadania w tle Administrator mail, database

6.11 Komendy CRON (1 powiadomienie)

Klasa Kiedy wysylane Odbiorca Kanaly
CommandErrorNotification Niepowodzenie komendy CRON Administrator mail, database

7. Jak to dziala?

Scenariusz 1: Powiadomienia przy rezerwacji

sequenceDiagram
    participant K as Klient
    participant S as System
    participant Q as Kolejka
    participant E as Email

    K->>S: Tworzy rezerwacje
    S->>Q: Kolejkuje powiadomienie
    Q->>E: Wysyla email
    E-->>K: "Potwierdzenie rezerwacji"

    K->>S: Potwierdza email
    S->>Q: Kolejkuje powiadomienie
    Q->>E: Wysyla email
    E-->>K: "Link do platnosci"

    K->>S: Oplaca rezerwacje
    S->>Q: Kolejkuje powiadomienie
    Q->>E: Wysyla email
    E-->>K: "Platnosc potwierdzona + rachunek PDF"

    Note over K,E: Alternatywnie — blad platnosci
    K->>S: Platnosc nieudana (P24 callback)
    S->>Q: Kolejkuje powiadomienie
    Q->>E: Wysyla email
    E-->>K: "Platnosc nieudana — sprobuj ponownie"

Scenariusz 2: Przegladanie powiadomien w panelu

  1. Administrator loguje sie do panelu
  2. Widzi liste powiadomien z filtrami (temat, tresc, odbiorca)
  3. Moze oznaczyc pojedyncze jako przeczytane (PATCH /notifications/{id}/set-read)
  4. Moze oznaczyc wszystkie jako przeczytane (PATCH /read-notifications)
  5. Stare powiadomienia sa automatycznie usuwane przez komende CRON

Scenariusz 3: Powiadomienie z pomijaniem

flowchart TD
    A[Zdarzenie w domenie] --> B{Typ powiadomienia?}
    B -->|Rezerwacja| C{reservation.send_notifications?}
    B -->|Reklamacja| D{Powiazana rezerwacja.send_notifications?}
    B -->|Inne| E[Wyslij powiadomienie]
    C -->|true| E
    C -->|false| F[Pomin powiadomienie]
    D -->|true| E
    D -->|false| F

8. Infrastruktura techniczna

8.1 Klasa bazowa CustomNotification

Wszystkie 39 klas powiadomien rozszerzaja Infrastructure\Vendor\CustomNotification:

CustomNotification extends Notification
├── Queueable — wsparcie kolejek
├── TraitSupport — metody pomocnicze
├── Properties: subject, content, action
├── via() → ['mail', 'database']
├── toMail() → SimpleBuildMailMessage
└── toArray() → {subject, content}

Wzorzec konstruktora:

Kazda klasa powiadomienia w konstruktorze:

  1. Przyjmuje model(e) domenowe jako parametry
  2. Buduje subject (temat emaila)
  3. Buduje content (tresc HTML)
  4. Ustawia action (przycisk CTA z URL)
  5. Opcjonalnie nadpisuje via() lub toMail()

8.2 Budowanie wiadomosci email

SimpleBuildMailMessage tworzy MailMessage:

  • Laduje konfiguracje gminy (loadMunicipalityConfiguration())
  • Ustawia powitanie: "Szanowni Panstwo,"
  • Tresc jako HtmlString (formatowany HTML)
  • Przycisk akcji z tekstem i URL
  • Podpis: "Z powazaniem," + nazwa gminy

8.3 Kolejkowanie

Komponent Kolejka Opis
SendNotificationJob notifications Wysylka pojedynczego powiadomienia
SimpleSendNotificationJob notifications Obsluga batch dispatch
ReportGeneratedNotification notifications Explicit onQueue('notifications')

Worker: php artisan queue:work --queue=notifications

8.4 Mechanizm wysylki

Dwie sciezki wysylki powiadomien:

Sciezka Klasa Uzycie
Indywidualna SendNotification Jeden odbiorca — uzytkownik lub email
Masowa SimpleSendNotification Lista emailow — np. aktualizacja dokumentow prawnych

8.5 Zrodla wyzwalania powiadomien

Zrodlo Przyklad
Observery modeli OrganizationEmployeeObserver, ItemManagerObserver, CreatedComplaintObserver
Akcje domenowe SendReservationConfirmationEmail, SendPaymentConfirmedNotification, SendCancellationNotification
Komendy CRON SendReservationRemindersCommandAction, SendPaymentRemindersCommandAction, SendReviewRemindersCommandAction
Middleware infrastrukturalne MonitoringCommandMiddleware (bledy komend), ChangeAppModeCommandAction (zmiana trybu)

9. Powiazania z innymi domenami

graph LR
    N[Notification]
    R[Reservation] -->|18 powiadomien| N
    U[User] -->|5 powiadomien| N
    C[Complaint] -->|4 powiadomienia| N
    A[Access] -->|3 powiadomienia| N
    O[Organization] -->|2 powiadomienia| N
    I[Item] -->|2 powiadomienia| N
    RP[Report] -->|1 powiadomienie| N
    LD[LegalDocument] -->|1 powiadomienie| N
    AM[AppMode] -->|1 powiadomienie| N
    J[Job] -->|1 powiadomienie| N
    CMD[Command] -->|1 powiadomienie| N
    CFG[Configuration] -.->|REMOVE_NOTIFICATIONS_OLDER_THAN_DAYS| N
Domena Liczba powiadomien Kierunek
Rezerwacje 18 Rezerwacja → Notification
Uzytkownicy 5 User → Notification
Reklamacje 4 Complaint → Notification
Dostep 3 Access → Notification
Organizacje 2 Organization → Notification
Zasoby 2 Item → Notification
Raporty 1 Report → Notification
Dokumenty prawne 1 LegalDocument → Notification
Tryb aplikacji 1 AppMode → Notification
Zadania kolejek 1 Job → Notification
Komendy CRON 1 Command → Notification
Konfiguracja Dostarcza parametr czyszczenia

10. Konfiguracja

Parametry systemowe

Parametr Typ Opis
REMOVE_NOTIFICATIONS_OLDER_THAN_DAYS integer Liczba dni po ktorych powiadomienia sa automatycznie usuwane

Komenda CRON

user-notification:remove-old-user-notifications

Usuwanie realizowane bezposrednio zapytaniem SQL na tabeli notifications — wydajna operacja masowa.

Zmienne srodowiskowe

Zmienna Uzycie
FRONTEND_URL Budowanie URL-i w przyciskach akcji (CTA) powiadomien
MAIL_* Konfiguracja SMTP dla wysylki email

11. Struktura plikow domeny

app/Domain/Notification/
├── Action/
│   ├── Controller/
│   │   ├── IndexNotificationController.php      # Lista powiadomien z filtrowaniem
│   │   └── ReadNotificationController.php       # Oznaczanie jako przeczytane
│   └── Other/
│       └── RemoveOldNotificationsCommandAction.php  # Usuwanie starych powiadomien
├── Command/
│   └── RemoveOldNotificationsCommand.php        # Komenda artisan CRON
├── Controller/
│   └── NotificationController.php               # Kontroler z middleware rol
├── Model/
│   ├── DatabaseNotification.php                 # Bazowy model z metodami read/unread
│   └── Notification.php                         # Glowny model z UUID i observerem
├── Observer/
│   └── NotificationObserver.php                 # Observer (obecnie pusty)
├── Request/
│   └── IndexNotificationControllerRequest.php   # Walidacja paginacji
├── Resource/
│   └── NotificationResource.php                 # Transformacja JSON
└── Service/
    ├── NotificationEnumService.php              # Enum konfiguracyjny
    ├── TraitControllerNotification.php          # Trait kontrolera
    └── TraitNotification.php                    # Trait domeny

Pliki infrastruktury i supportu:

Plik Opis
Infrastructure/Vendor/CustomNotification.php Klasa bazowa wszystkich powiadomien
Infrastructure/Vendor/HasDatabaseNotifications.php Trait relacji dla modeli
Support/Action/Notification/SendNotification.php Wysylka indywidualna
Support/Action/Notification/SimpleSendNotification.php Wysylka masowa
Support/Action/Notification/SimpleBuildMailMessage.php Budowanie wiadomosci email
Support/Job/SendNotificationJob.php Job kolejki — wysylka indywidualna
Support/Job/SimpleSendNotificationJob.php Job kolejki — batch dispatch
Support/Action/Other/ShouldSkipReservationNotification.php Logika pomijania powiadomien

12. Struktura powiadomienia

Kazde powiadomienie zawiera:

Element Opis Przyklad
Temat Krotki tytul wiadomosci "Potwierdzenie rezerwacji nr ABC123"
Tresc Sformatowany HTML z informacjami Lista szczegolow rezerwacji
Przycisk akcji CTA z linkiem do frontendu "Zobacz rezerwacje" → /rezerwacje/{id}
Powitanie Stale "Szanowni Panstwo,"
Podpis Nazwa gminy z konfiguracji "Z powazaniem, Gmina Przykladowa"

Przykladowe powiadomienie

Temat: Potwierdzenie rezerwacji nr ABC123

Tresc: Dziekujemy za dokonanie rezerwacji w systemie.

Szczegoly rezerwacji:

  • Numer rezerwacji: ABC123
  • Kod dostepu: XYZ789
  • Data rozpoczecia: 2026-03-15 10:00
  • Data zakonczenia: 2026-03-15 12:00
  • Status: Oczekujaca
  • Cena calkowita: 50,00 PLN

Przycisk: [Zobacz rezerwacje]


13. Wartosc biznesowa

Argumenty dla decydentow

  1. Zero recznej pracy — wszystkie powiadomienia wysylane automatycznie
  2. Profesjonalny wizerunek — spojna, markowa komunikacja z nazwa gminy
  3. Zadowolenie klientow — klient zawsze wie co sie dzieje z rezerwacja
  4. Redukcja telefonow — mniej pytan "co z moja rezerwacja?"
  5. Bezpieczenstwo — alerty o nowych logowaniach i zagrozeniach
  6. Elastycznosc — mozliwosc wylaczenia powiadomien per rezerwacja
  7. Skalowalnosc — asynchroniczna wysylka przez kolejki nie obciaza systemu

14. Znane ograniczenia i TODO

  • NotificationObserver jest obecnie pusty — placeholder na przyszle hooki lifecycle
  • Brak kanalu push/SMS — obecnie tylko email i baza danych
  • Brak mozliwosci konfigurowania przez uzytkownika, ktore typy powiadomien chce otrzymywac
  • Klienci nie maja dostepu do API powiadomien — moga je tylko otrzymywac emailem