Найдите пользователей, для которых нет заказа с датой в заданном интервале. 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). Невалидный диапазон длительности нужно отклонить.