diff --git a/src/main/java/ru/soune/nocopy/configuration/HandlerConfig.java b/src/main/java/ru/soune/nocopy/configuration/HandlerConfig.java index f4e6704..40451fa 100644 --- a/src/main/java/ru/soune/nocopy/configuration/HandlerConfig.java +++ b/src/main/java/ru/soune/nocopy/configuration/HandlerConfig.java @@ -20,7 +20,8 @@ public class HandlerConfig { ImageFoundRequestHandler imageFoundRequestHandler, VerifyRegisterUserHandler verifyRegisterUser, AuthRequestHandler authRequestHandler, - CompanyHandler companyHandler + CompanyHandler companyHandler, + TariffHandler tariffHandler ) { Map map = new HashMap<>(); map.put(20001, login); @@ -32,6 +33,7 @@ public class HandlerConfig { map.put(20008, authRequestHandler); map.put(20009, verifyRegisterUser); map.put(30000, companyHandler); + map.put(30001, tariffHandler); return map; } diff --git a/src/main/java/ru/soune/nocopy/controller/ApiController.java b/src/main/java/ru/soune/nocopy/controller/ApiController.java index cc80b87..83fa33e 100644 --- a/src/main/java/ru/soune/nocopy/controller/ApiController.java +++ b/src/main/java/ru/soune/nocopy/controller/ApiController.java @@ -422,23 +422,6 @@ public class ApiController { return ResponseEntity.ok().body(noCopyCheckResult); } - private ResponseEntity checkForDuplicates(String uploadId) throws IOException { - Optional uploadedFile = fileEntityRepository.findByUploadSessionId(uploadId); - - if (uploadedFile.isEmpty() || !uploadedFile.get().getMimeType().equals("image")) { - return null; - } - - FileEntity fileEntity = uploadedFile.get(); - List similarFiles = fileSimilarityService.findSimilarFiles(fileEntity.getId()); - - if (hasDuplicate(similarFiles)) { - return handleDuplicate(fileEntity, similarFiles); - } - - return null; - } - private boolean hasDuplicate(List similarFiles) { return similarFiles.stream().anyMatch(f -> f.getHammingDistance() <= 5); } diff --git a/src/main/java/ru/soune/nocopy/dto/MessageCode.java b/src/main/java/ru/soune/nocopy/dto/MessageCode.java index c712e7b..7ded2ee 100644 --- a/src/main/java/ru/soune/nocopy/dto/MessageCode.java +++ b/src/main/java/ru/soune/nocopy/dto/MessageCode.java @@ -30,6 +30,10 @@ public enum MessageCode { SIMILAR_FILES_FOUND(0, "Similar files found"), FILE_IS_PROTECTED(0, "File is protected"), FILE_IS_NOT_PROTECTED(0, "File is not protected"), + TARIFF_IS_ADD(0, "Tariff is added"), + TARIFF_IS_DELETED(0, "Tariff is deleted"), + TARIFF_IS_UPDATED(0, "Tariff is updated"), + TARIFF_IS_NOT_FOUND(0, "Tariff is not found"), VALIDATION_ERROR(2, "Validation error"), RESOURCE_NOT_FOUND(4, "Resource not found"), INTERNAL_ERROR(4, "Internal server error"), diff --git a/src/main/java/ru/soune/nocopy/dto/tarriff/TariffRequest.java b/src/main/java/ru/soune/nocopy/dto/tarriff/TariffRequest.java new file mode 100644 index 0000000..b85ad5f --- /dev/null +++ b/src/main/java/ru/soune/nocopy/dto/tarriff/TariffRequest.java @@ -0,0 +1,49 @@ +package ru.soune.nocopy.dto.tarriff; + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class TariffRequest { + private Long id; + + @NotNull + @NotBlank + @JsonProperty("type") + private String type; + + @NotNull + @NotBlank + @JsonProperty("tariff_name") + private String name; + + @Min(value = 0, message = "Price cannot be negative") + @JsonProperty("tariff_price") + private double price; + + @Min(value = 0, message = "Tokens must be at least 0") + @JsonProperty("tariff_tokens") + private int tokens; + + @Min(value = 0, message = "Max files count must be at least 0") + @JsonProperty("max_files") + private int maxFilesCount; + + @Min(value = 0, message = "Disk size must be at least 0") + @JsonProperty("disk_size") + private int diskSize; + + @Min(value = 0, message = "Max users must be at least 0") + @JsonProperty("max_users") + private int maxUsers; + + @JsonProperty("action") + private String action; +} \ No newline at end of file diff --git a/src/main/java/ru/soune/nocopy/dto/tarriff/TariffResponse.java b/src/main/java/ru/soune/nocopy/dto/tarriff/TariffResponse.java new file mode 100644 index 0000000..21c1974 --- /dev/null +++ b/src/main/java/ru/soune/nocopy/dto/tarriff/TariffResponse.java @@ -0,0 +1,12 @@ +package ru.soune.nocopy.dto.tarriff; + +import lombok.Builder; +import lombok.Data; +import ru.soune.nocopy.entity.tarif.Tariff; + +@Data +@Builder +public class TariffResponse { + private String tariffName; + private String tariffType; +} diff --git a/src/main/java/ru/soune/nocopy/entity/tarif/Tariff.java b/src/main/java/ru/soune/nocopy/entity/tarif/Tariff.java index 45b3654..c67ac58 100644 --- a/src/main/java/ru/soune/nocopy/entity/tarif/Tariff.java +++ b/src/main/java/ru/soune/nocopy/entity/tarif/Tariff.java @@ -1,6 +1,7 @@ package ru.soune.nocopy.entity.tarif; import jakarta.persistence.*; +import jakarta.validation.constraints.NotEmpty; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -13,13 +14,11 @@ import lombok.Setter; @Getter @Setter public class Tariff { - - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Column(name = "type") + @Column(name = "type", unique = true, nullable = false) private String type; @Column(name = "tariff_name") diff --git a/src/main/java/ru/soune/nocopy/handler/TariffHandler.java b/src/main/java/ru/soune/nocopy/handler/TariffHandler.java new file mode 100644 index 0000000..3006aac --- /dev/null +++ b/src/main/java/ru/soune/nocopy/handler/TariffHandler.java @@ -0,0 +1,111 @@ +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.tarriff.TariffDTO; +import ru.soune.nocopy.dto.tarriff.TariffRequest; +import ru.soune.nocopy.dto.tarriff.TariffResponse; +import ru.soune.nocopy.service.tariff.TariffService; + +import java.util.Map; + +@Component +@Slf4j +@RequiredArgsConstructor +public class TariffHandler implements RequestHandler { + + private final ObjectMapper objectMapper; + + private final TariffService tariffService; + + @Override + public BaseResponse handle(BaseRequest request) throws Exception { + try { + TariffRequest tariffRequest = objectMapper.convertValue(request.getMessageBody(), TariffRequest.class); + String action = tariffRequest.getAction(); + + switch (action) { + case "add": + return handleAddTariff(request, tariffRequest); + case "remove": + return handleRemoveTariff(request, tariffRequest); + case "update": + return null; + } + + } catch (Exception e) { + log.error("Error add tariff", e); + return new BaseResponse( + request.getMsgId(), + MessageCode.SUCCESS.getCode(), + "Error processing request: " + e.getMessage(), + null); + } + + return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(), + MessageCode.SUCCESS.getDescription(), null); + } + + private BaseResponse handleAddTariff(BaseRequest request, TariffRequest tariffRequest) { + tariffService.addTariff(tariffRequest.getName(), tariffRequest.getPrice(), tariffRequest.getType(), + tariffRequest.getTokens(), tariffRequest.getDiskSize(), tariffRequest.getMaxUsers(), + tariffRequest.getMaxFilesCount()); + + TariffResponse tariffResponse = TariffResponse.builder() + .tariffName(tariffRequest.getName()) + .tariffType(tariffRequest.getType()) + .build(); + + return new BaseResponse(request.getMsgId(), MessageCode.TARIFF_IS_ADD.getCode(), + MessageCode.TARIFF_IS_ADD.getDescription(), + tariffResponse); + } + + private BaseResponse handleRemoveTariff(BaseRequest request, TariffRequest tariffRequest) { + TariffDTO tariff = tariffService.getTariffById(tariffRequest.getId()); + + if (tariff == null) { + return new BaseResponse(request.getMsgId(), MessageCode.TARIFF_IS_NOT_FOUND.getCode(), + MessageCode.TARIFF_IS_NOT_FOUND.getDescription(), + Map.of("id", tariffRequest.getId())); + } + + TariffResponse tariffResponse = TariffResponse.builder() + .tariffName(tariff.getName()) + .tariffType(tariff.getType()) + .build(); + + tariffService.deleteTariff(tariffRequest.getId()); + + return new BaseResponse(request.getMsgId(), MessageCode.TARIFF_IS_DELETED.getCode(), + MessageCode.TARIFF_IS_DELETED.getDescription(), + tariffResponse); + } + + private BaseResponse handleUpdateTariff(BaseRequest request, TariffRequest tariffRequest) { + TariffDTO tariff = tariffService.getTariffById(tariffRequest.getId()); + + if (tariff == null) { + return new BaseResponse(request.getMsgId(), MessageCode.TARIFF_IS_NOT_FOUND.getCode(), + MessageCode.TARIFF_IS_NOT_FOUND.getDescription(), + Map.of("id", tariffRequest.getId())); + } + + TariffDTO tariffDTO = tariffService.updateTariff(tariffRequest.getId(), tariff); + + TariffResponse tariffResponse = TariffResponse.builder() + .tariffName(tariffDTO.getName()) + .tariffType(tariffDTO.getType()) + .build(); + + + return new BaseResponse(request.getMsgId(), MessageCode.TARIFF_IS_UPDATED.getCode(), + MessageCode.TARIFF_IS_UPDATED.getDescription(), + tariffResponse); + } +} diff --git a/src/main/java/ru/soune/nocopy/service/tariff/TariffInitializationService.java b/src/main/java/ru/soune/nocopy/service/tariff/TariffInitializationService.java index a5a8735..668f939 100644 --- a/src/main/java/ru/soune/nocopy/service/tariff/TariffInitializationService.java +++ b/src/main/java/ru/soune/nocopy/service/tariff/TariffInitializationService.java @@ -88,13 +88,6 @@ public class TariffInitializationService { if (existingTariffs.isEmpty()) { createDefaultTariffs(); - } else { - Map existingTypes = new HashMap<>(); - existingTariffs.forEach(tariff -> existingTypes.put(TariffType.valueOf(tariff.getType()), true)); - - Arrays.stream(TariffType.values()) - .filter(type -> !existingTypes.containsKey(type)) - .forEach(this::createDefaultTariff); } } diff --git a/src/main/java/ru/soune/nocopy/service/tariff/TariffService.java b/src/main/java/ru/soune/nocopy/service/tariff/TariffService.java index af3e0b9..29131ba 100644 --- a/src/main/java/ru/soune/nocopy/service/tariff/TariffService.java +++ b/src/main/java/ru/soune/nocopy/service/tariff/TariffService.java @@ -18,8 +18,8 @@ public class TariffService { private final TariffRepository tariffRepository; - public Tariff addTariff(String tariffName, double price, String type, int tokens, long diskSize, long maxUsers, - int maxFilesCount) { + public void addTariff(String tariffName, double price, String type, int tokens, long diskSize, long maxUsers, + int maxFilesCount) { Tariff tariff = new Tariff(); tariff.setName(tariffName); tariff.setPrice(price); @@ -29,7 +29,7 @@ public class TariffService { tariff.setMaxUsers(maxUsers); tariff.setMaxFilesCount(maxFilesCount); - return tariffRepository.save(tariff); + tariffRepository.save(tariff); } public List getAllTariffs() {