Условие
API поиска авторов и их книг по имени автора. При каждом поисковом запросе обновляется статистика по частоте использования поисковой строки (обновляется раз в сутки другой системой). При обнаружении популярного запроса (у которого находится много авторов), отправляется алерт. Алерт должен отправляться не более 1 раза в сутки для каждого запроса.
@RestController
public class AuthorController {
@Autowired
private AuthorSearchService service;
@GetMapping("/authors")
public List<AuthorDto> readAllAuthors(@RequestParam String query) {
List<Author> authors = service.search(query);
return authors.stream().map(author -> new AuthorDto(author.getName()))
.collect(Collectors.toList());
}
}
@Component
public class AuthorSearchService {
@Autowired
private AuthorRepository authorRepository;
@Autowired
private StatisticsRepository statisticsRepository;
private AlertRestClient arc = new AlertRestClient();
@Transactional
public List<Author> search(String query) {
List<Author> authors = authorRepository.findByNameContainingIgnoreCase(query);
Statistics s = statisticsRepository.findById(query).orElse(null);
if (s == null) {
s = new Statistics(query);
}
s.setNumbers(s.getNumbers() + 1);
statisticsRepository.save(s);
if (s.getNumbers() > 1000 && authors.size() > 1000) {
System.out.println("Too popular search with too much data, sending an alert...");
arc.send(query, s.getNumbers(), authors.size());
}
return authors;
}
}1. Задача: Проанализируйте представленный код и предложите улучшения.
Дополнительно
Кандидату было предложено проанализировать код сервиса поиска авторов. В коде реализована логика поиска, обновления статистики запросов и отправки алертов при превышении пороговых значений.