Cześć, tworzę aplikację internetową w Springu i zrobiłem do niej backendowy moduł rejestracji użytkowników przez email oraz potwierdzanie maila przez confirmation link.
Jest to mój pierwszy w pełni zrobiony moduł rejestracji i bardzo bym prosił Was o ocenę kodu ;)
https://github.com/jedras55/betliga/pull/3
Pozdrawiam
Generalnie standardowy projekt w starym Springu, całkiem chlujny. Ten podział na pakiety service, dto, controller tylko trochę bez sensu. Jakby tak wszystkie klasy account wrzucić bezpośrednio w pakiet account to nadal by działało i naprawdę dałbyś radę Controller znaleźć.
Mini hint.
Ten kod ponizej można trochę odgłupić:
public boolean confirmAccount(String username, String confirmationKey) {
boolean confirmResult = false;
User user = userRepository.findByUsername(username);
ConfirmationKey userConfirmationKey = confirmationKeyRepository.findByUser(user);
if (userConfirmationKey != null
&& userConfirmationKey.getConfirmationKey().equals(confirmationKey)) {
user.setConfirmed(true);
userRepository.save(user);
confirmationKeyRepository.delete(userConfirmationKey);
confirmResult = true;
}
return confirmResult;
}
Twoje DAO (zwane ConfirmationKeyRepository ) może zwracać optionala.
Optional<UserConfirmationKey > findByUser(User user);
I wtedy: (EDIT - był bug trochę pomieszałem najpierw).
public boolean confirmAccount(String username, String confirmationKey) {
User user = userRepository.findByUsername(username);
return confirmationKeyRepository.findByUser(user).map( key -> {
if ( key.getConfirmationKey().equals(confirmationKey)) {
user.setConfirmed(true);
confirmationKeyRepository.delete(key);
return true;
} else {
return false;
}
}).orElse(false);
}
Robi to samo. Nie ma flagi. Przy okazji nie wywołuje userRepository.save. Bo nie ma potrzeby.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.