This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
package ru.soune.nocopy.service.tariff;
|
||||
|
||||
public class TariffConstants {
|
||||
public static final double DEMO_PRICE = 0;
|
||||
public static final double BASIC_PRICE = 100;
|
||||
public static final double START_PRICE = 200;
|
||||
public static final double PRO_PRICE = 300;
|
||||
public static final double ENTERPRISE_PRICE = 400;
|
||||
|
||||
public static final Integer DEMO_TOKENS = 10;
|
||||
public static final Integer BASIC_TOKENS = 100;
|
||||
public static final Integer START_TOKENS = 200;
|
||||
public static final Integer PRO_TOKENS = 300;
|
||||
public static final Integer ENTERPRISE_TOKENS = 400;
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
package ru.soune.nocopy.service.tariff;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import ru.soune.nocopy.dto.tarriff.TariffInfoDTO;
|
||||
import ru.soune.nocopy.entity.tarif.Tariff;
|
||||
import ru.soune.nocopy.entity.tarif.TariffInfo;
|
||||
import ru.soune.nocopy.entity.tarif.TariffStatus;
|
||||
import ru.soune.nocopy.entity.tarif.TariffType;
|
||||
import ru.soune.nocopy.exception.TariffNotFoundException;
|
||||
import ru.soune.nocopy.repository.TariffInfoRepository;
|
||||
import ru.soune.nocopy.repository.TariffRepository;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
public class TariffInfoService {
|
||||
|
||||
private TariffInfoRepository tariffInfoRepository;
|
||||
|
||||
private TariffRepository tariffRepository;
|
||||
|
||||
public TariffInfo createTariffInfo(LocalDateTime startTariff, LocalDateTime endTariff, TariffStatus tariffStatus) {
|
||||
TariffInfo tariffInfo = new TariffInfo();
|
||||
tariffInfo.setStartTariff(startTariff);
|
||||
tariffInfo.setStatus(tariffStatus);
|
||||
tariffInfo.setEndTariff(endTariff);
|
||||
|
||||
return tariffInfoRepository.save(tariffInfo);
|
||||
}
|
||||
|
||||
public TariffInfo createTariffInfo(TariffType tariffType) {
|
||||
Tariff tariff = tariffRepository.findByType(tariffType).orElseThrow();
|
||||
|
||||
TariffInfo tariffInfo = createTariffInfo(LocalDateTime.now(), LocalDateTime.now().plusDays(30),
|
||||
TariffStatus.ACTIVE);
|
||||
tariffInfo.setTariff(tariff);
|
||||
|
||||
return tariffInfoRepository.save(tariffInfo);
|
||||
}
|
||||
|
||||
public void addTariffInfo(TariffInfo tariffInfo) {
|
||||
tariffInfoRepository.save(tariffInfo);
|
||||
}
|
||||
|
||||
public List<TariffInfoDTO> getAllTariffInfos() {
|
||||
return tariffInfoRepository.findAll()
|
||||
.stream()
|
||||
.map(this::convertToInfoDTO)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public TariffInfoDTO getTariffInfoById(String id) {
|
||||
return tariffInfoRepository.findById(id)
|
||||
.map(this::convertToInfoDTO)
|
||||
.orElseThrow(() -> new TariffNotFoundException("Tariff info not found"));
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public TariffInfoDTO createTariffInfo(TariffInfoDTO tariffInfoDTO) {
|
||||
TariffInfo tariffInfo = new TariffInfo();
|
||||
updateTariffInfoFromDTO(tariffInfo, tariffInfoDTO);
|
||||
return convertToInfoDTO(tariffInfoRepository.save(tariffInfo));
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public TariffInfoDTO updateTariffInfo(String id, TariffInfoDTO tariffInfoDTO) {
|
||||
TariffInfo tariffInfo = tariffInfoRepository.findById(id)
|
||||
.orElseThrow(() -> new TariffNotFoundException("Tariff not found"));
|
||||
updateTariffInfoFromDTO(tariffInfo, tariffInfoDTO);
|
||||
return convertToInfoDTO(tariffInfoRepository.save(tariffInfo));
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void deleteTariffInfo(String id) {
|
||||
tariffInfoRepository.deleteById(id);
|
||||
}
|
||||
|
||||
private TariffInfoDTO convertToInfoDTO(TariffInfo tariffInfo) {
|
||||
return new TariffInfoDTO(
|
||||
tariffInfo.getId(),
|
||||
tariffInfo.getStatus().name(),
|
||||
tariffInfo.getStartTariff(),
|
||||
tariffInfo.getEndTariff(),
|
||||
tariffInfo.getTariff() != null ? tariffInfo.getTariff().getId() : null,
|
||||
tariffInfo.getTariff() != null ? tariffInfo.getTariff().getName() : null
|
||||
);
|
||||
}
|
||||
|
||||
private void updateTariffInfoFromDTO(TariffInfo tariffInfo, TariffInfoDTO dto) {
|
||||
tariffInfo.setStatus(TariffStatus.valueOf(dto.getStatus()));
|
||||
tariffInfo.setStartTariff(dto.getStartTariff());
|
||||
tariffInfo.setEndTariff(dto.getEndTariff());
|
||||
|
||||
if (dto.getTariffId() != null) {
|
||||
Tariff tariff = tariffRepository.findById(dto.getTariffId())
|
||||
.orElseThrow(() -> new TariffNotFoundException("Tariff not found"));
|
||||
tariffInfo.setTariff(tariff);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
package ru.soune.nocopy.service.tariff;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import ru.soune.nocopy.entity.tarif.Tariff;
|
||||
import ru.soune.nocopy.entity.tarif.TariffType;
|
||||
import ru.soune.nocopy.repository.TariffRepository;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class TariffInitializationService {
|
||||
|
||||
private final TariffRepository tariffRepository;
|
||||
|
||||
@EventListener(ApplicationReadyEvent.class)
|
||||
@Transactional
|
||||
public void initializeDefaultTariffs() {
|
||||
List<Tariff> existingTariffs = tariffRepository.findAll();
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
private void createDefaultTariffs() {
|
||||
Arrays.stream(TariffType.values())
|
||||
.forEach(this::createDefaultTariff);
|
||||
}
|
||||
|
||||
private void createDefaultTariff(TariffType type) {
|
||||
Tariff tariff = new Tariff();
|
||||
tariff.setType(type.name());
|
||||
|
||||
switch (type) {
|
||||
case DEMO:
|
||||
tariff.setName("Демо");
|
||||
tariff.setPrice(TariffConstants.DEMO_PRICE);
|
||||
tariff.setTokens(TariffConstants.DEMO_TOKENS);
|
||||
tariff.setMaxFilesCount(10);
|
||||
tariff.setDiskSize(1024L * 1024 * 100);
|
||||
tariff.setMaxUsers(1L);
|
||||
break;
|
||||
|
||||
case START:
|
||||
tariff.setName("Стартовый");
|
||||
tariff.setPrice(TariffConstants.START_PRICE);
|
||||
tariff.setTokens(TariffConstants.START_TOKENS);
|
||||
tariff.setMaxFilesCount(50);
|
||||
tariff.setDiskSize(1024L * 1024 * 500);
|
||||
tariff.setMaxUsers(3L);
|
||||
break;
|
||||
|
||||
case BASIC:
|
||||
tariff.setName("Базовый");
|
||||
tariff.setPrice(TariffConstants.BASIC_PRICE);
|
||||
tariff.setTokens(TariffConstants.BASIC_TOKENS);
|
||||
tariff.setMaxFilesCount(200);
|
||||
tariff.setDiskSize(1024L * 1024 * 1024 * 2L);
|
||||
tariff.setMaxUsers(10L);
|
||||
break;
|
||||
|
||||
case PRO:
|
||||
tariff.setName("Профессиональный");
|
||||
tariff.setPrice(TariffConstants.PRO_PRICE);
|
||||
tariff.setTokens(TariffConstants.PRO_TOKENS);
|
||||
tariff.setMaxFilesCount(1000);
|
||||
tariff.setDiskSize(1024L * 1024 * 1024 * 10L);
|
||||
tariff.setMaxUsers(25L);
|
||||
break;
|
||||
|
||||
case ENTERPRISE:
|
||||
tariff.setName("Корпоративный");
|
||||
tariff.setPrice(TariffConstants.ENTERPRISE_PRICE);
|
||||
tariff.setTokens(TariffConstants.ENTERPRISE_TOKENS);
|
||||
tariff.setMaxFilesCount(5000);
|
||||
tariff.setDiskSize(1024L * 1024 * 1024 * 50L);
|
||||
tariff.setMaxUsers(100L);
|
||||
break;
|
||||
}
|
||||
|
||||
tariffRepository.save(tariff);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
package ru.soune.nocopy.service.tariff;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import ru.soune.nocopy.dto.tarriff.TariffDTO;
|
||||
import ru.soune.nocopy.entity.tarif.Tariff;
|
||||
import ru.soune.nocopy.entity.tarif.TariffType;
|
||||
import ru.soune.nocopy.exception.TariffNotFoundException;
|
||||
import ru.soune.nocopy.repository.TariffRepository;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
public class TariffService {
|
||||
|
||||
private final TariffRepository tariffRepository;
|
||||
|
||||
public Tariff 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);
|
||||
tariff.setType(type);
|
||||
tariff.setTokens(tokens);
|
||||
tariff.setDiskSize(diskSize);
|
||||
tariff.setMaxUsers(maxUsers);
|
||||
tariff.setMaxFilesCount(maxFilesCount);
|
||||
|
||||
return tariffRepository.save(tariff);
|
||||
}
|
||||
|
||||
public List<TariffDTO> getAllTariffs() {
|
||||
return tariffRepository.findAllByOrderByPriceAsc()
|
||||
.stream()
|
||||
.map(this::convertToDTO)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public TariffDTO getTariffById(Long id) {
|
||||
return tariffRepository.findById(id)
|
||||
.map(this::convertToDTO)
|
||||
.orElseThrow(() -> new TariffNotFoundException("Tariff not found"));
|
||||
}
|
||||
|
||||
public TariffDTO getTariffByType(TariffType type) {
|
||||
return tariffRepository.findByType(type)
|
||||
.map(this::convertToDTO)
|
||||
.orElseThrow(() -> new TariffNotFoundException("Tariff not found"));
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public TariffDTO createTariff(TariffDTO tariffDTO) {
|
||||
Tariff tariff = new Tariff();
|
||||
updateTariffFromDTO(tariff, tariffDTO);
|
||||
|
||||
return convertToDTO(tariffRepository.save(tariff));
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public TariffDTO updateTariff(Long id, TariffDTO tariffDTO) {
|
||||
Tariff tariff = tariffRepository.findById(id)
|
||||
.orElseThrow(() -> new TariffNotFoundException("Tariff not found"));
|
||||
updateTariffFromDTO(tariff, tariffDTO);
|
||||
|
||||
return convertToDTO(tariffRepository.save(tariff));
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void deleteTariff(Long id) {
|
||||
tariffRepository.deleteById(id);
|
||||
}
|
||||
|
||||
private TariffDTO convertToDTO(Tariff tariff) {
|
||||
return new TariffDTO(
|
||||
tariff.getId(),
|
||||
tariff.getType(),
|
||||
tariff.getName(),
|
||||
tariff.getPrice(),
|
||||
tariff.getTokens(),
|
||||
tariff.getMaxFilesCount(),
|
||||
tariff.getDiskSize(),
|
||||
tariff.getMaxUsers()
|
||||
);
|
||||
}
|
||||
|
||||
private void updateTariffFromDTO(Tariff tariff, TariffDTO dto) {
|
||||
tariff.setType(dto.getType());
|
||||
tariff.setName(dto.getName());
|
||||
tariff.setPrice(dto.getPrice());
|
||||
tariff.setTokens(dto.getTokens());
|
||||
tariff.setMaxFilesCount(dto.getMaxFilesCount());
|
||||
tariff.setDiskSize(dto.getDiskSize());
|
||||
tariff.setMaxUsers(dto.getMaxUsers());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user