diff --git a/src/main/java/ru/soune/nocopy/dto/MessageCode.java b/src/main/java/ru/soune/nocopy/dto/MessageCode.java index 0261972..4384659 100644 --- a/src/main/java/ru/soune/nocopy/dto/MessageCode.java +++ b/src/main/java/ru/soune/nocopy/dto/MessageCode.java @@ -48,6 +48,7 @@ public enum MessageCode { PAYMENT_NOT_FOUND(4, "Payment not found"), COMPANY_ALREADY_EXISTS(2, "Company already exists"), USER_LIMIT_IS_OVER(2, "Over user limits"), + MONITORING_TYPE_NOT_FOUND(4, "Monitoring type not found"), ERROR_TARIFF_INFO(2, "Erorr with tariff info"), FILE_FOR_SEARCH_NOT_VALID(2, "File for search unsupported"), NOT_VALID_FILE_TYPE_OR_COUNT_FILE(2, "Cost for file type not found, count is negative or files count" + diff --git a/src/main/java/ru/soune/nocopy/dto/monitoring/MonitoringStatusResponse.java b/src/main/java/ru/soune/nocopy/dto/monitoring/MonitoringStatusResponse.java index b9b832a..e8d8a87 100644 --- a/src/main/java/ru/soune/nocopy/dto/monitoring/MonitoringStatusResponse.java +++ b/src/main/java/ru/soune/nocopy/dto/monitoring/MonitoringStatusResponse.java @@ -37,4 +37,7 @@ public class MonitoringStatusResponse { @JsonProperty("new_violations_count") private long newViolationsCount; + + @JsonProperty("need_add_tokens") + private boolean needAddTokens; } diff --git a/src/main/java/ru/soune/nocopy/dto/monitoring/SetMonitoringRequest.java b/src/main/java/ru/soune/nocopy/dto/monitoring/SetMonitoringRequest.java index 4694f65..bf49b47 100644 --- a/src/main/java/ru/soune/nocopy/dto/monitoring/SetMonitoringRequest.java +++ b/src/main/java/ru/soune/nocopy/dto/monitoring/SetMonitoringRequest.java @@ -13,7 +13,7 @@ public class SetMonitoringRequest { private String fileId; @JsonProperty("monitoring_type") - private MonitoringType monitoringType; + private String monitoringType; @JsonProperty("auth_token") private String authToken; diff --git a/src/main/java/ru/soune/nocopy/handler/MonitoringHandler.java b/src/main/java/ru/soune/nocopy/handler/MonitoringHandler.java index 77dee1b..876c71e 100644 --- a/src/main/java/ru/soune/nocopy/handler/MonitoringHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/MonitoringHandler.java @@ -10,14 +10,14 @@ 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.exception.UserNotHavePermission; import ru.soune.nocopy.service.monitoring.FileMonitoringService; import ru.soune.nocopy.service.register.AuthService; -import ru.soune.nocopy.service.tariff.TariffService; +import java.io.FileNotFoundException; +import java.util.Arrays; import java.util.Map; @Slf4j @@ -31,10 +31,6 @@ public class MonitoringHandler implements RequestHandler { private final AuthService authService; - private final TariffService tariffService; - - private final TariffRepository tariffRepository; - @Override public BaseResponse handle(BaseRequest request) throws Exception { SetMonitoringRequest setRequest = objectMapper.convertValue( @@ -51,21 +47,33 @@ public class MonitoringHandler implements RequestHandler { User user = userAuthToken.getUser(); Long userId = user.getId(); - MonitoringType monitoringType = setRequest.getMonitoringType(); + String typeStr = setRequest.getMonitoringType(); + MonitoringType monitoringType; - monitoringService.setMonitoring(userId, setRequest.getFileId(), monitoringType); + try { + monitoringType = MonitoringType.valueOf(typeStr); + } catch (IllegalArgumentException e) { + return new BaseResponse(request.getMsgId(), + MessageCode.MONITORING_TYPE_NOT_FOUND.getCode(), + MessageCode.MONITORING_TYPE_NOT_FOUND.getDescription(), + Map.of("monitoring", Arrays.asList(MonitoringType.values()))); + } + + try { + monitoringService.setMonitoring(userId, setRequest.getFileId(), monitoringType); + } catch (UserNotHavePermission e) { + return new BaseResponse(request.getMsgId(), + MessageCode.USER_NOT_HAD_PERMISSION.getCode(), + MessageCode.USER_NOT_HAD_PERMISSION.getDescription(), Map.of("token", authToken)); + } catch (FileNotFoundException e) { + return new BaseResponse(request.getMsgId(), + MessageCode.FILE_NOT_FOUND.getCode(), + MessageCode.FILE_NOT_FOUND.getDescription(), Map.of("fileId", setRequest.getFileId())); + } 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; + return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(), + "Monitoring settings updated", status); } } diff --git a/src/main/java/ru/soune/nocopy/service/monitoring/FileMonitoringService.java b/src/main/java/ru/soune/nocopy/service/monitoring/FileMonitoringService.java index 4a2d1e7..45453cf 100644 --- a/src/main/java/ru/soune/nocopy/service/monitoring/FileMonitoringService.java +++ b/src/main/java/ru/soune/nocopy/service/monitoring/FileMonitoringService.java @@ -5,13 +5,19 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ru.soune.nocopy.dto.monitoring.MonitoringStatusResponse; +import ru.soune.nocopy.dto.tarriff.TariffDTO; import ru.soune.nocopy.entity.file.*; import ru.soune.nocopy.entity.monitoring.FileMonitoringEntity; import ru.soune.nocopy.entity.monitoring.MonitoringType; +import ru.soune.nocopy.entity.tarif.TariffInfo; +import ru.soune.nocopy.entity.tarif.TariffType; +import ru.soune.nocopy.entity.user.User; import ru.soune.nocopy.exception.UserNotHavePermission; import ru.soune.nocopy.repository.FileEntityRepository; import ru.soune.nocopy.repository.FileMonitoringRepository; import ru.soune.nocopy.repository.FoundViolationRepository; +import ru.soune.nocopy.repository.UserRepository; +import ru.soune.nocopy.service.tariff.TariffService; import java.io.FileNotFoundException; import java.time.LocalDateTime; @@ -27,6 +33,10 @@ public class FileMonitoringService { private final FoundViolationRepository violationRepository; + private final TariffService tariffService; + + private final UserRepository userRepository; + @Transactional public FileMonitoringEntity setMonitoring(Long userId, String fileId, MonitoringType type) throws FileNotFoundException { FileEntity file = fileRepository.findById(fileId) @@ -82,7 +92,7 @@ public class FileMonitoringService { public MonitoringStatusResponse getMonitoringStatus(String fileId, Long userId) { FileMonitoringEntity monitoring = monitoringRepository.findByFileId(fileId).orElse(null); FileEntity file = fileRepository.findById(fileId).orElseThrow(); - + User user = userRepository.findById(userId).orElseThrow(); long newViolations = violationRepository.countNewByUserId(userId); return MonitoringStatusResponse.builder() @@ -94,7 +104,15 @@ public class FileMonitoringService { .lastRunStatus(monitoring != null ? monitoring.getLastRunStatus() : null) .isActive(monitoring != null && monitoring.isActive()) .newViolationsCount(newViolations) + .needAddTokens(checkTokensForMonitoring(user, monitoring.getMonitoringType())) .build(); } + public boolean checkTokensForMonitoring(User user, MonitoringType monitoringType) { + TariffDTO tariff = tariffService.getTariffByType(TariffType.valueOf(monitoringType.name())); + TariffInfo activeTariffInfo = user.getActiveTariffInfo(); + int currentUserCountTokens = activeTariffInfo.getTokens() + activeTariffInfo.getBoughtTokens(); + + return currentUserCountTokens > tariff.getTokens(); + } }