Gdzie powinna być walidacja czy wpisywane wartości do dto są spójne z bazą?

0

Użytkownik chce dodać nowego kierowcę do systemu, ma formatkę i podaje jego login. Formatka tworzy dto, który potem jest przekonwertowywany do source i zapisywany.
W bazie może być już użytkownik Julian i nie można zapisać 2 Julianów. Walidacja sprawdzająca czy podany nick nie występuje już w bazie powinna być w controllerze, serwisie czy we froncie czy gdzie?

Tak jest OK?

@Service
public class UserServiceImpl implements UserService {

	// ...

		@Override
	public UserDto createNewUser(UserDto userDto) {
		if(userRepo.existsByLogin(userDto.getLogin())) {
			throw new ResourceAlreadyExistException("Login " + userDto.getLogin() + " already exist.");
		}
		User usr = userMapper.dtoToNewSource(userDto);
		return this.saveUser(usr);
	}

	
}
1
Walidacja sprawdzająca czy podany nick nie występuje już w bazie powinna być w controllerze, serwisie czy we froncie czy gdzie?

Minimum w serwisie (backend nie powinien wpuścić czegoś co jest niepoprawne do bazy). Ale dobrze by było i na froncie - fajnie gdyby użytkownik szybko dostał informację o takiej sytuacji.

Jak będzie w serwisie to teoretycznie w kontrolerze już nie ma większego sensu.

1

Moim zdaniem kontroler jest spoko. Serwis z reguły traktuje jako coś co wykonuje już kilka operacji na spójnych danych, np chce usunąć jakiś zasób po nazwie. Serwis pobiera listę zasobów które spełniają dane kryteria i wszystko usuwa wiec operacja w serwisie jest już transakcja. Zanim wiec wykonywane będą jakieś operacje to musza być walidowane czyli wrzucam to do kontrolera. Chyba ze dzieje się tam dużo więcej magii i logiki to wtedy warto się bardziej zastanowić.
Ps. Dodatkowo na froncie tez warto zrobić walidacja ale po stronie serwera mimo wszystko dla bezpieczeństwa wole te dane raz jeszcze sprawdzić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1