Варианты отрефакторить код, избавиться от if else и возможно сделать код универсальным
Всем привет достался в работу следующий код:
@GetMapping
public List<?> search (@RequestParam(name = "search") String search){
if (search.contains(":")) {
String[] strings = search.split(":");
boolean isNumbers = strings[1].chars().allMatch(Character::isDigit);
if(strings[0].equals("user") && isNumbers){
Long id = Long.parseLong(strings[1]);
if(userService.existsById(id)) {
return searchDto.getQuestionsByUserId(id);
} else {
return searchDto.getQuestionsSortedByVotes();
}
} else if(strings[0].equals("answers") && isNumbers){
return searchDto.getQuestionsByNumberOfAnswers(Long.parseLong(strings[1]));
} else if(strings[0].equals("votes") && isNumbers){
return searchDto.getQuestionsByNumberOfVotes(Integer.parseInt(strings[1]));
} else if(strings[0].equals("helpful")){
if(strings[1].equals("yes")){
return searchDto.getQuestionsByFieldHelpful(true);
} else if (strings[1].equals("no")){
return searchDto.getQuestionsByFieldHelpful(false);
} else {
return searchDto.getQuestionsSortedByVotes();
}
}
}
return searchDto.search(search);
}
Стоит задача отрефакторить его, убрать if else и добавить универсальность его применения, т.е. если в будущем понадобится сделать какие-то новые условия для поиска, то это не составит труда сделать, например, написанием дополнительного класса, ну понятное дело функционал нужно сохранить, смотрел на разные паттерны, но что-то ничего не подходит, или я еще просто не дорос до понимания как это можно сделать, всем спасибо