@@ -20,7 +20,8 @@ public class HandlerConfig {
|
||||
ImageFoundRequestHandler imageFoundRequestHandler,
|
||||
VerifyRegisterUserHandler verifyRegisterUser,
|
||||
AuthRequestHandler authRequestHandler,
|
||||
CompanyHandler companyHandler
|
||||
CompanyHandler companyHandler,
|
||||
TariffHandler tariffHandler
|
||||
) {
|
||||
Map<Integer, RequestHandler> 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;
|
||||
}
|
||||
|
||||
@@ -422,23 +422,6 @@ public class ApiController {
|
||||
return ResponseEntity.ok().body(noCopyCheckResult);
|
||||
}
|
||||
|
||||
private ResponseEntity<BaseResponse> checkForDuplicates(String uploadId) throws IOException {
|
||||
Optional<FileEntity> uploadedFile = fileEntityRepository.findByUploadSessionId(uploadId);
|
||||
|
||||
if (uploadedFile.isEmpty() || !uploadedFile.get().getMimeType().equals("image")) {
|
||||
return null;
|
||||
}
|
||||
|
||||
FileEntity fileEntity = uploadedFile.get();
|
||||
List<SimilarFileDTO> similarFiles = fileSimilarityService.findSimilarFiles(fileEntity.getId());
|
||||
|
||||
if (hasDuplicate(similarFiles)) {
|
||||
return handleDuplicate(fileEntity, similarFiles);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean hasDuplicate(List<SimilarFileDTO> similarFiles) {
|
||||
return similarFiles.stream().anyMatch(f -> f.getHammingDistance() <= 5);
|
||||
}
|
||||
|
||||
@@ -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"),
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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")
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -88,13 +88,6 @@ public class TariffInitializationService {
|
||||
|
||||
if (existingTariffs.isEmpty()) {
|
||||
createDefaultTariffs();
|
||||
} else {
|
||||
Map<TariffType, Boolean> 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<TariffDTO> getAllTariffs() {
|
||||
|
||||
Reference in New Issue
Block a user