dev add check tokens for monitoring
Test Workflow / test (push) Successful in 3s

This commit is contained in:
vladp
2026-03-05 12:11:09 +07:00
parent 5c27fd52ba
commit 88e7121213
5 changed files with 51 additions and 21 deletions
@@ -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" +
@@ -37,4 +37,7 @@ public class MonitoringStatusResponse {
@JsonProperty("new_violations_count")
private long newViolationsCount;
@JsonProperty("need_add_tokens")
private boolean needAddTokens;
}
@@ -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;
@@ -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);
}
}
@@ -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();
}
}