{"id":31527166,"url":"https://github.com/mkopylec/password-reset","last_synced_at":"2026-02-15T16:03:04.927Z","repository":{"id":94006242,"uuid":"41914359","full_name":"mkopylec/password-reset","owner":"mkopylec","description":"Projekt powstał w celu przeprowadzenia warsztatów z tworzenia mikro-serwisów za pomocą Domain-Driven Design.","archived":false,"fork":false,"pushed_at":"2015-11-18T20:10:26.000Z","size":226,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-03T21:58:40.941Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mkopylec.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-09-04T12:23:52.000Z","updated_at":"2019-07-02T03:05:43.000Z","dependencies_parsed_at":"2023-03-13T17:08:29.334Z","dependency_job_id":null,"html_url":"https://github.com/mkopylec/password-reset","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mkopylec/password-reset","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkopylec%2Fpassword-reset","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkopylec%2Fpassword-reset/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkopylec%2Fpassword-reset/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkopylec%2Fpassword-reset/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mkopylec","download_url":"https://codeload.github.com/mkopylec/password-reset/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkopylec%2Fpassword-reset/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29483312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T15:33:17.885Z","status":"ssl_error","status_checked_at":"2026-02-15T15:32:53.698Z","response_time":118,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-03T21:58:39.325Z","updated_at":"2026-02-15T16:03:04.907Z","avatar_url":"https://github.com/mkopylec.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Allegro Password Reset\nProjekt powstał w celu przeprowadzenia warsztatów z tworzenia mikro-serwisów za pomocą Domain-Driven Design.\n\n## Założenia wstępne\n - Istnieje frontend, który będzie korzystał z implementowanego serwisu (nie implementujemy frontendu).\n - Istnieje kolejka rozsyłająca wiadomości (nie implementujemy kolejki).\n - Dane z MongoDB, ze względu na wydajność, mogą być wyszukiwane tylko po ID dokumentu.\n \n## Ogólny opis funkcjonalności\nZadaniem serwisu jest wystawienie możliwości odnowienia hasła przez użytkowników.\nDodatkowo serwis ma udostępniać dla administratorów historię wysłanych do użytkowników e-maili z linkiem do zmiany hasła.\n\n## Krok 1\n### Odnowienie hasła:\n1. **_Użytkownik_** wchodzi na stronę gdzie podaje swój **_login_** lub **_email_**.  \n    a) Jeżeli użytkownik posiada **_nawisko panieńskie_** swojej matki, **_imię_** i **_nazwisko_** to przechodzi do strony gdzie podaje nazwisko panieńskie.\n    *(Pełna metoda odnawiania hasła)*  \n    b) Jeżeli użytkownik nie posiada nazwiska panieńskiego, ale ma imię i nazwisko, to przechodzi do pkt. 2.\n    *(Uproszczona metoda odnawiania hasła)*  \n    c) W przeciwnym wypadku użytkownik nie może odnowić swojego hasła. **Proces się kończy**.\n    *(Metoda odnawiania hasła niedostępna)*\n2. Do użytkownika zostaje **_wysłany e-mail_** z linkiem do ustalenia nowego hasła.\nLink przychodzi jako parametr z frontendu.\nW temacie e-maila jest zawarte imię i nazwisko użytkownika.\n3. Po kliknięciu na link użytkownik podaje nowe hasło.\n4. Hasło użytkownika zostaje **_zaszyfrowane_** i zmienione. **Proces się kończy**.\n\n### Pozyskiwanie danych o użytkownikach\n1. Przychodzi wiadomość z kolejki z danymi użytkowników.\n2. Dane użytkowników są zapisywane do MongoDB.\n\n### Zadanie do zaimplementowania\n1. Przełączyć się na branch step-1-start\n2. Zaimplementować po kolei endpointy zaczynając od góry, tak aby testy przechodziły.\n3. Porównać implementację z branchami step-1-endpoint-x.\n\n## Krok 2\n### Wyświetlenie historii wysłanych e-maili:\n1. Podczas wysyłki e-maila do użytkownika dodawany jest wpis do **_historii_**.\n2. Admin na stronie podaje **_id użytkownika_**.\n3. Na stronie wylistowane są następujące dane: **_login użytkownika_**, **_adres e-mail użytkownika_**, **_data wysłania e-maila_**.\n\n### Zadanie do zaimplementowania\n1. Przełączyć się na branch step-2-start\n2. Zaimplementować ostatni endpoint tak aby testy przechodziły.\n3. Porównać implementację z branchami step-2-endpoint-1.\n\n----\n\n# Architektura DDD\nPomoc dydaktyczna.\n\n## Logika aplikacji\n#### Serwis aplikacyjny\n - Metoda = przypadek użycia\n - Operuje na modelu\n - Bezstanowy\n \n#### Kontrakt z serwisem infrastrukturalnym\n - Definiuje funkcjonalności pomocnicze\n - Interfejs\n \n## Model\n#### Agregat\n - Podstawowa jednostka operacyjna\n - Powiązane encje i value objecty\n - Jeden punkt wejściowy – korzeń\n - Zawsze w prawidłowym stanie\n\nEncja:\n\n - Unikalne ID\n - Mutowalna\n - Nieanemiczna\n \nValue Object:\n\n - Brak unikalnego pola\n - Niemutowalny\n - Typ złożony\n\n#### Serwis domenowy\n - Metoda = zachowanie logicznie nie pasujące do żadnej encji\n - Bezstanowy\n\n#### Fabryka\n - Tworzy agregaty\n - Ogranicza sposoby tworzenia agregatu\n - Wyciąga złożoną logikę z konstruktorów\n\n#### Repozytorium\n - Zarządza utrwalaniem agregatów\n - Interfejs\n\n#### Zdarzenie domenowe\n - Oddziela model od innych warstw\n - Konsumowane w innych warstwach\n\n#### Polityka\n - Odzwierciedla wykonanie jednej operacji na kilka sposobów\n - Wzorzec projektowy: Strategia\n\n#### Kontrakt z serwisem infrastrukturalnym\n - Definiuje funkcjonalności pomocnicze\n - Interfejs\n\n## Infrastruktura\n#### Serwis infrastrukturalny\n - Spełnia kontrakt zdefiniowany w innych warstwach\n - Bezstanowy\n\n#### Implementacja repozytorium\n - Spełnia kontrakt zdefiniowany przez repozytorium\n - Określa sposób utrwalania agregatów\n - Bezstanowa\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkopylec%2Fpassword-reset","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmkopylec%2Fpassword-reset","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkopylec%2Fpassword-reset/lists"}