Создание сервиса для выявления неактивных клиентов

Найдите пользователей, для которых нет заказа с датой в заданном интервале. NOT EXISTS естественно включает и тех, кто никогда не делал заказов; точные методы репозиториев в условии не заданы.

Короткий ответ

Что ответить на собеседовании

Найдите пользователей, для которых нет заказа с датой в заданном интервале. NOT EXISTS естественно включает и тех, кто никогда не делал заказов; точные методы репозиториев в условии не заданы.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо реализовать метод getUsersAbsentForDuration(Duration duration), который будет возвращать список пользователей, не делавших заказов за указанный промежуток времени.

public abstract class AnalyricsService {
    OrderRepository ordersRepo = new OrderRepository;
    UserRepository usersRepo = new UserRepository;
    public abstract List<User> getUsersAbsentForDuration(Duration duration);
}

Ответ

Найдите пользователей, для которых нет заказа с датой в заданном интервале. NOT EXISTS естественно включает и тех, кто никогда не делал заказов; точные методы репозиториев в условии не заданы.

Для предполагаемой схемы users/orders:

SELECT u.*
FROM users u
WHERE NOT EXISTS (
  SELECT 1 FROM orders o
  WHERE o.user_id = u.id
    AND o.created_at >= :cutoff
    AND o.created_at <= :now
);

В сервисе один раз получите now из Clock, проверьте неотрицательную duration и вычислите cutoff = now.minus(duration). Передайте параметры в repository, а не загружайте все заказы в память. Для поддержки запроса полезен индекс по (user_id, created_at). Невалидный диапазон длительности нужно отклонить.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее