Projekt powstał w celu przeprowadzenia warsztatów z tworzenia mikro-serwisów za pomocą Domain-Driven Design.
- Istnieje frontend, który będzie korzystał z implementowanego serwisu (nie implementujemy frontendu).
- Istnieje kolejka rozsyłająca wiadomości (nie implementujemy kolejki).
- Dane z MongoDB, ze względu na wydajność, mogą być wyszukiwane tylko po ID dokumentu.
Zadaniem serwisu jest wystawienie możliwości odnowienia hasła przez użytkowników. Dodatkowo serwis ma udostępniać dla administratorów historię wysłanych do użytkowników e-maili z linkiem do zmiany hasła.
- Użytkownik wchodzi na stronę gdzie podaje swój login lub email.
a) Jeżeli użytkownik posiada nawisko panieńskie swojej matki, imię i nazwisko to przechodzi do strony gdzie podaje nazwisko panieńskie. (Pełna metoda odnawiania hasła)
b) Jeżeli użytkownik nie posiada nazwiska panieńskiego, ale ma imię i nazwisko, to przechodzi do pkt. 2. (Uproszczona metoda odnawiania hasła)
c) W przeciwnym wypadku użytkownik nie może odnowić swojego hasła. Proces się kończy. (Metoda odnawiania hasła niedostępna) - Do użytkownika zostaje wysłany e-mail z linkiem do ustalenia nowego hasła. Link przychodzi jako parametr z frontendu. W temacie e-maila jest zawarte imię i nazwisko użytkownika.
- Po kliknięciu na link użytkownik podaje nowe hasło.
- Hasło użytkownika zostaje zaszyfrowane i zmienione. Proces się kończy.
- Przychodzi wiadomość z kolejki z danymi użytkowników.
- Dane użytkowników są zapisywane do MongoDB.
- Przełączyć się na branch step-1-start
- Zaimplementować po kolei endpointy zaczynając od góry, tak aby testy przechodziły.
- Porównać implementację z branchami step-1-endpoint-x.
- Podczas wysyłki e-maila do użytkownika dodawany jest wpis do historii.
- Admin na stronie podaje id użytkownika.
- Na stronie wylistowane są następujące dane: login użytkownika, adres e-mail użytkownika, data wysłania e-maila.
- Przełączyć się na branch step-2-start
- Zaimplementować ostatni endpoint tak aby testy przechodziły.
- Porównać implementację z branchami step-2-endpoint-1.
Pomoc dydaktyczna.
- Metoda = przypadek użycia
- Operuje na modelu
- Bezstanowy
- Definiuje funkcjonalności pomocnicze
- Interfejs
- Podstawowa jednostka operacyjna
- Powiązane encje i value objecty
- Jeden punkt wejściowy – korzeń
- Zawsze w prawidłowym stanie
Encja:
- Unikalne ID
- Mutowalna
- Nieanemiczna
Value Object:
- Brak unikalnego pola
- Niemutowalny
- Typ złożony
- Metoda = zachowanie logicznie nie pasujące do żadnej encji
- Bezstanowy
- Tworzy agregaty
- Ogranicza sposoby tworzenia agregatu
- Wyciąga złożoną logikę z konstruktorów
- Zarządza utrwalaniem agregatów
- Interfejs
- Oddziela model od innych warstw
- Konsumowane w innych warstwach
- Odzwierciedla wykonanie jednej operacji na kilka sposobów
- Wzorzec projektowy: Strategia
- Definiuje funkcjonalności pomocnicze
- Interfejs
- Spełnia kontrakt zdefiniowany w innych warstwach
- Bezstanowy
- Spełnia kontrakt zdefiniowany przez repozytorium
- Określa sposób utrwalania agregatów
- Bezstanowa