Cześć. Zaczynam z hexagonal architecture i jestem na etapie tworzenia pierwszej apki, w której użytkownik może wykupić dostęp do aplikacji płacąc comiesięczną subskrypcje.
Moje aktualne wymagania to:
- rejestracja, podczas której użytkownik wybiera jeden z planów subskrypcji. Po rejestracji użytkownik dostaje darmowego miesięcznego triala, użytkownik nie podaje danych do płatności przy rejestracji
- aktywacja konta przez e-maila
- logowanie
- zmiana hasła
- obsługa całego systemu subskrypcji i płatności tj. obsługa płatności oraz błędów przy pobieraniu opłaty za kolejny miesiąc, dodawanie/zmienianie/usuwanie metod płatności, upgrade i downgrade subskrypcji itd. Implementacja z użyciem stripe
Moje główne pytanie jest takie, czy powinienem zrobić dwie osobne domeny o nazwach np. User i Subscription, czy wszystko powinno być zamknięte w obrębie jednej, większej domeny.
Obie funkcjonalności mają ze sobą trochę wspólnego + są od siebie zależne, to znaczy np. w bazie danych nie zakładam możliwości, że będzie istniał User bez odpowiadającego mu obiektu Subscription i na odwrót. Jak na początku chciałem zaimplementować dwie osobne domeny, to miałem już problem z pierwszym use-casem, bo gdy np. domenie subskrypcji nie uda się utworzyć nowej subskrypcji, to domena użytkownika powinna wycofać wszystkie swoje zmiany i zwrócić błąd do klienta. Nie jestem pewny, czy to jest dobre rozwiązanie tego problemu. Ewentualnie można też zrobić tak, że istnieją dwie osobne domeny, ale np. domena User jest w pełni odpowiedzialna za tworzenie użytkownika i tworzenie subskrypcji z trialem? Z góry dzięki za odpowiedź.