package ru.soune.nocopy.handler; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import ru.soune.nocopy.dto.BaseRequest; import ru.soune.nocopy.dto.BaseResponse; import ru.soune.nocopy.dto.MessageCode; import ru.soune.nocopy.dto.statistic.MonitoringStatisticResponse; import ru.soune.nocopy.entity.company.Company; import ru.soune.nocopy.entity.monitoring.MonitoringType; import ru.soune.nocopy.entity.user.User; import ru.soune.nocopy.repository.FileMonitoringRepository; import ru.soune.nocopy.repository.UserRepository; import java.util.List; @Slf4j @Component @RequiredArgsConstructor public class MonitoringStatisticHandler implements RequestHandler { private final FileMonitoringRepository fileMonitoringRepository; private final UserRepository userRepository; private final HttpServletRequest httpServletRequest; @Override public BaseResponse handle(BaseRequest request) throws Exception { try { Long userId = (Long) httpServletRequest.getAttribute("userId"); User user = userRepository.findById(userId).orElseThrow(); Company company = user.getCompany(); List userIds = company == null ? List.of(userId) : user.getCompany() .getUsers() .stream() .map(User::getId).toList(); MonitoringStatisticResponse monitoringStatisticResponse = MonitoringStatisticResponse.builder() .everyDay(fileMonitoringRepository.countByUserIdsAndMonitoringType(userIds, MonitoringType.MONITORING_DAILY)) .everyMonth(fileMonitoringRepository.countByUserIdsAndMonitoringType(userIds, MonitoringType.MONITORING_MONTHLY)) .everyWeekly(fileMonitoringRepository.countByUserIdsAndMonitoringType(userIds, MonitoringType.MONITORING_WEEKLY)) .build(); return new BaseResponse( request.getMsgId(), MessageCode.SUCCESS.getCode(), MessageCode.SUCCESS.getDescription(), monitoringStatisticResponse); } catch (Exception e) { return new BaseResponse( request.getMsgId(), MessageCode.INVALID_JSON_BODY.getCode(), MessageCode.INVALID_JSON_BODY.getDescription(), null); } } }