package ru.soune.nocopy.handler; import com.fasterxml.jackson.databind.ObjectMapper; 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.monitoring.MonitoringStatusResponse; import ru.soune.nocopy.dto.monitoring.SetMonitoringRequest; import ru.soune.nocopy.entity.monitoring.MonitoringType; import ru.soune.nocopy.entity.tarif.TariffType; import ru.soune.nocopy.entity.user.AuthToken; import ru.soune.nocopy.entity.user.User; import ru.soune.nocopy.repository.TariffRepository; import ru.soune.nocopy.service.monitoring.FileMonitoringService; import ru.soune.nocopy.service.register.AuthService; import ru.soune.nocopy.service.tariff.TariffService; import java.util.Map; @Slf4j @Component @RequiredArgsConstructor public class MonitoringHandler implements RequestHandler { private final ObjectMapper objectMapper; private final FileMonitoringService monitoringService; private final AuthService authService; private final TariffService tariffService; private final TariffRepository tariffRepository; @Override public BaseResponse handle(BaseRequest request) throws Exception { SetMonitoringRequest setRequest = objectMapper.convertValue( request.getMessageBody(), SetMonitoringRequest.class); String authToken = setRequest.getAuthToken(); AuthToken userAuthToken = authService.getAuthToken(authToken); if (authToken == null || userAuthToken == null) { return new BaseResponse(30007, MessageCode.AUTH_TOKEN_NOT_FOUND.getCode(), MessageCode.AUTH_TOKEN_NOT_FOUND.getDescription(), Map.of("token", authToken)); } User user = userAuthToken.getUser(); Long userId = user.getId(); MonitoringType monitoringType = setRequest.getMonitoringType(); monitoringService.setMonitoring(userId, setRequest.getFileId(), monitoringType); MonitoringStatusResponse status = monitoringService.getMonitoringStatus(setRequest.getFileId(), userId); return new BaseResponse( request.getMsgId(), MessageCode.SUCCESS.getCode(), "Monitoring settings updated", status); } //TODO check tokens for apply private boolean checkTokensForMonitoring(User user, MonitoringType monitoringType) { tariffService.getTariffByType(TariffType.valueOf(monitoringType.name())); return true; } }