diff --git a/src/main/java/ru/soune/nocopy/dto/tarriff/TariffDTO.java b/src/main/java/ru/soune/nocopy/dto/tarriff/TariffDTO.java index 0748a9f..3c7627a 100644 --- a/src/main/java/ru/soune/nocopy/dto/tarriff/TariffDTO.java +++ b/src/main/java/ru/soune/nocopy/dto/tarriff/TariffDTO.java @@ -16,4 +16,5 @@ public class TariffDTO { private int maxFilesCount; private Long diskSize; private Long maxUsers; + private String tariffTerm; } diff --git a/src/main/java/ru/soune/nocopy/dto/tarriff/TariffRequest.java b/src/main/java/ru/soune/nocopy/dto/tarriff/TariffRequest.java index b623e6a..524cccf 100644 --- a/src/main/java/ru/soune/nocopy/dto/tarriff/TariffRequest.java +++ b/src/main/java/ru/soune/nocopy/dto/tarriff/TariffRequest.java @@ -49,4 +49,7 @@ public class TariffRequest { @JsonProperty("user_token") private String userToken; + + @JsonProperty("tariff_term") + private String tariffTerm; } \ No newline at end of file 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 abf1395..3e6d3f6 100644 --- a/src/main/java/ru/soune/nocopy/entity/tarif/Tariff.java +++ b/src/main/java/ru/soune/nocopy/entity/tarif/Tariff.java @@ -40,4 +40,8 @@ public class Tariff { @Column(name = "tariffAccountType") private String tariffAccountType; + + @Column(name = "tariff_term") + @Enumerated(EnumType.STRING) + private TariffTimeTerm tariffTerm; } diff --git a/src/main/java/ru/soune/nocopy/entity/tarif/TariffTimeTerm.java b/src/main/java/ru/soune/nocopy/entity/tarif/TariffTimeTerm.java new file mode 100644 index 0000000..be0c078 --- /dev/null +++ b/src/main/java/ru/soune/nocopy/entity/tarif/TariffTimeTerm.java @@ -0,0 +1,15 @@ +package ru.soune.nocopy.entity.tarif; + +public enum TariffTimeTerm { + MONTHLY(30),YEAR(365); + + private final Integer days; + + TariffTimeTerm(Integer days) { + this.days = days; + } + + public Integer getDays() { + return days; + } +} diff --git a/src/main/java/ru/soune/nocopy/entity/tarif/TariffType.java b/src/main/java/ru/soune/nocopy/entity/tarif/TariffType.java index aa3eb2b..f48cbb9 100644 --- a/src/main/java/ru/soune/nocopy/entity/tarif/TariffType.java +++ b/src/main/java/ru/soune/nocopy/entity/tarif/TariffType.java @@ -2,6 +2,7 @@ package ru.soune.nocopy.entity.tarif; public enum TariffType { - START, BASIC, PRO, ENTERPRISE, DEMO, BUISNES, CORPORAT, STUDIO, FREE, TOKEN_100, TOKEN_500, TOKEN_1000, TOKEN_5000, + START, START_YEAR, BASIC, BASIC_YEAR, PRO, PRO_YEAR, ENTERPRISE, ENTERPRISE_YEAR, DEMO, BUISNES, BUISNES_YEAR, + CORPORAT, CORPORAT_YEAR, STUDIO, STUDIO_YEAR, FREE, TOKEN_100, TOKEN_500, TOKEN_1000, TOKEN_5000, MONITORING_DAILY, MONITORING_WEEKLY, MONITORING_MONTHLY; } \ No newline at end of file diff --git a/src/main/java/ru/soune/nocopy/handler/TariffHandler.java b/src/main/java/ru/soune/nocopy/handler/TariffHandler.java index 89d24f0..036bc2a 100644 --- a/src/main/java/ru/soune/nocopy/handler/TariffHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/TariffHandler.java @@ -10,6 +10,7 @@ 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.entity.tarif.TariffTimeTerm; import ru.soune.nocopy.entity.user.AuthToken; import ru.soune.nocopy.entity.user.User; import ru.soune.nocopy.repository.AuthTokenRepository; @@ -64,7 +65,7 @@ public class TariffHandler implements RequestHandler { private BaseResponse handleAddTariff(BaseRequest request, TariffRequest tariffRequest) { tariffService.addTariff(tariffRequest.getName(), tariffRequest.getPrice(), tariffRequest.getType(), tariffRequest.getTokens(), tariffRequest.getDiskSize(), tariffRequest.getMaxUsers(), - tariffRequest.getMaxFilesCount()); + tariffRequest.getMaxFilesCount(), tariffRequest.getTariffTerm()); TariffResponse tariffResponse = TariffResponse.builder() .tariffName(tariffRequest.getName()) @@ -122,7 +123,8 @@ public class TariffHandler implements RequestHandler { private BaseResponse handleGetTariffs(BaseRequest request, TariffRequest tariffRequest) { AuthToken authToken = authTokenRepository.findByToken(tariffRequest.getUserToken()).orElseThrow(); User user = authToken.getUser(); - List allTariffs = tariffService.getTariffByAccountType(user); + List allTariffs = tariffService.getTariffByAccountTypeAndTariffTerm(user, + TariffTimeTerm.valueOf(tariffRequest.getTariffTerm().toUpperCase())); return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(), MessageCode.SUCCESS.getDescription(), diff --git a/src/main/java/ru/soune/nocopy/handler/TariffInfoHandler.java b/src/main/java/ru/soune/nocopy/handler/TariffInfoHandler.java index 7c53c9f..c56dd12 100644 --- a/src/main/java/ru/soune/nocopy/handler/TariffInfoHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/TariffInfoHandler.java @@ -12,6 +12,7 @@ import ru.soune.nocopy.dto.tarriff.TariffInfoRequest; import ru.soune.nocopy.dto.tarriff.TariffInfoResponse; import ru.soune.nocopy.entity.tarif.Tariff; import ru.soune.nocopy.entity.tarif.TariffStatus; +import ru.soune.nocopy.entity.tarif.TariffTimeTerm; import ru.soune.nocopy.entity.tarif.TariffType; import ru.soune.nocopy.repository.TariffRepository; import ru.soune.nocopy.service.tariff.TariffInfoService; @@ -75,13 +76,14 @@ public class TariffInfoHandler implements RequestHandler { try { Long tariffId = tariffInfoRequest.getTariffId(); Tariff tariff= tariffRepository.findById(tariffId).orElseThrow(); + TariffTimeTerm tariffTerm = tariff.getTariffTerm(); + LocalDateTime endDateTime = LocalDateTime.now().plusDays(tariffTerm.getDays()); TariffInfoDTO tariffInfoDTO = new TariffInfoDTO(null, tariffInfoRequest.getStatus() != null ? tariffInfoRequest.getStatus() : TariffStatus.ACTIVE.name(), tariffInfoRequest.getStartTariff() != null ? tariffInfoRequest.getStartTariff() : LocalDateTime.now(), - tariffInfoRequest.getEndTariff() != null ? tariffInfoRequest.getEndTariff() : LocalDateTime.now().plusDays(30), - tariffInfoRequest.getTariffId(), tariff.getName(), tariff.getTokens(), tariff.getDiskSize(), 0L, - 0, tariff.getMaxFilesCount()); + endDateTime, tariffInfoRequest.getTariffId(), tariff.getName(), tariff.getTokens(), + tariff.getDiskSize(), 0L, 0, tariff.getMaxFilesCount()); TariffInfoDTO createdTariffInfo = tariffInfoService.createTariffInfo(tariffInfoDTO); diff --git a/src/main/java/ru/soune/nocopy/repository/TariffRepository.java b/src/main/java/ru/soune/nocopy/repository/TariffRepository.java index a0e3bc9..b39e48a 100644 --- a/src/main/java/ru/soune/nocopy/repository/TariffRepository.java +++ b/src/main/java/ru/soune/nocopy/repository/TariffRepository.java @@ -3,6 +3,7 @@ package ru.soune.nocopy.repository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import ru.soune.nocopy.entity.tarif.Tariff; +import ru.soune.nocopy.entity.tarif.TariffTimeTerm; import ru.soune.nocopy.entity.tarif.TariffType; import java.util.List; @@ -13,5 +14,6 @@ public interface TariffRepository extends JpaRepository { Optional findByType(String type); List findAllByOrderByPriceAsc(); List findByTariffAccountType(String typeAccount); + List findByTariffAccountTypeAndTariffTerm(String typeAccount, TariffTimeTerm tariffTerm); Tariff findByName(String name); } diff --git a/src/main/java/ru/soune/nocopy/service/tariff/TariffInfoService.java b/src/main/java/ru/soune/nocopy/service/tariff/TariffInfoService.java index 8e2054c..426a6c6 100644 --- a/src/main/java/ru/soune/nocopy/service/tariff/TariffInfoService.java +++ b/src/main/java/ru/soune/nocopy/service/tariff/TariffInfoService.java @@ -75,8 +75,8 @@ public class TariffInfoService { public TariffInfo createTariffInfo(TariffType tariffType) { Tariff tariff = tariffRepository.findByType(tariffType.toString()).orElseThrow(); - TariffInfo tariffInfo = createTariffInfo(LocalDateTime.now(), LocalDateTime.now().plusDays(30), - TariffStatus.ACTIVE, tariff.getTokens()); + TariffInfo tariffInfo = createTariffInfo(LocalDateTime.now(), + LocalDateTime.now().plusDays(tariff.getTariffTerm().getDays()), TariffStatus.ACTIVE, tariff.getTokens()); tariffInfo.setTariff(tariff); return tariffInfoRepository.save(tariffInfo); 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 72244d5..47c743d 100644 --- a/src/main/java/ru/soune/nocopy/service/tariff/TariffInitializationService.java +++ b/src/main/java/ru/soune/nocopy/service/tariff/TariffInitializationService.java @@ -7,13 +7,12 @@ 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.TariffTimeTerm; 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 @@ -109,6 +108,7 @@ public class TariffInitializationService { tariff.setDiskSize(1024L * 1024 * 100); tariff.setMaxUsers(1L); tariff.setTariffAccountType("b2c"); + tariff.setTariffTerm(TariffTimeTerm.MONTHLY); break; case START: @@ -119,6 +119,18 @@ public class TariffInitializationService { tariff.setDiskSize(1024L * 1024 * 500); tariff.setMaxUsers(1L); tariff.setTariffAccountType("b2c"); + tariff.setTariffTerm(TariffTimeTerm.MONTHLY); + break; + + case START_YEAR: + tariff.setName("start_year"); + tariff.setPrice(1100); + tariff.setTokens(300); + tariff.setMaxFilesCount(80); + tariff.setDiskSize(1024L * 1024 * 500); + tariff.setMaxUsers(1L); + tariff.setTariffAccountType("b2c"); + tariff.setTariffTerm(TariffTimeTerm.YEAR); break; case PRO: @@ -129,8 +141,21 @@ public class TariffInitializationService { tariff.setDiskSize(1024L * 1024 * 1024 * 10L); tariff.setMaxUsers(1L); tariff.setTariffAccountType("b2c"); + tariff.setTariffTerm(TariffTimeTerm.MONTHLY); break; + case PRO_YEAR: + tariff.setName("pro_year"); + tariff.setPrice(4100); + tariff.setTokens(900); + tariff.setMaxFilesCount(300); + tariff.setDiskSize(1024L * 1024 * 1024 * 10L); + tariff.setMaxUsers(1L); + tariff.setTariffAccountType("b2c"); + tariff.setTariffTerm(TariffTimeTerm.YEAR); + break; + + case STUDIO: tariff.setName("studio"); tariff.setPrice(9750); @@ -139,6 +164,18 @@ public class TariffInitializationService { tariff.setDiskSize(1024L * 1024 * 1024 * 50L); tariff.setMaxUsers(2L); tariff.setTariffAccountType("b2c"); + tariff.setTariffTerm(TariffTimeTerm.MONTHLY); + break; + + case STUDIO_YEAR: + tariff.setName("studio_year"); + tariff.setPrice(9500); + tariff.setTokens(3000); + tariff.setMaxFilesCount(1000); + tariff.setDiskSize(1024L * 1024 * 1024 * 50L); + tariff.setMaxUsers(2L); + tariff.setTariffAccountType("b2c"); + tariff.setTariffTerm(TariffTimeTerm.YEAR); break; case BASIC: @@ -149,6 +186,18 @@ public class TariffInitializationService { tariff.setDiskSize(1024L * 1024 * 1024 * 50L); tariff.setMaxUsers(basicUserCount); tariff.setTariffAccountType("b2c"); + tariff.setTariffTerm(TariffTimeTerm.MONTHLY); + break; + + case BASIC_YEAR: + tariff.setName("basic_year"); + tariff.setPrice(basicPrice); + tariff.setTokens(basicTokens); + tariff.setMaxFilesCount(enterpriceMaxFileCount); + tariff.setDiskSize(1024L * 1024 * 1024 * 50L); + tariff.setMaxUsers(basicUserCount); + tariff.setTariffAccountType("b2c"); + tariff.setTariffTerm(TariffTimeTerm.YEAR); break; case ENTERPRISE: @@ -159,6 +208,18 @@ public class TariffInitializationService { tariff.setDiskSize(1024L * 1024 * 1024 * 10L); tariff.setMaxUsers(10L); tariff.setTariffAccountType("b2b"); + tariff.setTariffTerm(TariffTimeTerm.MONTHLY); + break; + + case ENTERPRISE_YEAR: + tariff.setName("enterprise_year"); + tariff.setPrice(200000); + tariff.setTokens(30000); + tariff.setMaxFilesCount(100000); + tariff.setDiskSize(1024L * 1024 * 1024 * 10L); + tariff.setMaxUsers(10L); + tariff.setTariffAccountType("b2b"); + tariff.setTariffTerm(TariffTimeTerm.YEAR); break; case BUISNES: @@ -169,8 +230,21 @@ public class TariffInitializationService { tariff.setDiskSize(1024L * 1024 * 1024 * 50L); tariff.setMaxUsers(5L); tariff.setTariffAccountType("b2b"); + tariff.setTariffTerm(TariffTimeTerm.MONTHLY); break; + case BUISNES_YEAR: + tariff.setName("buisnes_year"); + tariff.setPrice(29000); + tariff.setTokens(5000); + tariff.setMaxFilesCount(5000); + tariff.setDiskSize(1024L * 1024 * 1024 * 50L); + tariff.setMaxUsers(5L); + tariff.setTariffAccountType("b2b"); + tariff.setTariffTerm(TariffTimeTerm.YEAR); + break; + + case CORPORAT: tariff.setName("corporat"); tariff.setPrice(99000); @@ -179,8 +253,21 @@ public class TariffInitializationService { tariff.setDiskSize(1024L * 1024 * 1024 * 50L); tariff.setMaxUsers(10L); tariff.setTariffAccountType("b2b"); + tariff.setTariffTerm(TariffTimeTerm.MONTHLY); break; + case CORPORAT_YEAR: + tariff.setName("corporat_year"); + tariff.setPrice(99000); + tariff.setTokens(20000); + tariff.setMaxFilesCount(50000); + tariff.setDiskSize(1024L * 1024 * 1024 * 50L); + tariff.setMaxUsers(10L); + tariff.setTariffAccountType("b2b"); + tariff.setTariffTerm(TariffTimeTerm.YEAR); + break; + + case TOKEN_100: tariff.setName("token_100"); tariff.setPrice(299); 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 2149b08..be2c083 100644 --- a/src/main/java/ru/soune/nocopy/service/tariff/TariffService.java +++ b/src/main/java/ru/soune/nocopy/service/tariff/TariffService.java @@ -5,6 +5,7 @@ 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.TariffTimeTerm; import ru.soune.nocopy.entity.tarif.TariffType; import ru.soune.nocopy.entity.user.User; import ru.soune.nocopy.exception.TariffNotFoundException; @@ -20,7 +21,7 @@ public class TariffService { private final TariffRepository tariffRepository; public void addTariff(String tariffName, double price, String type, int tokens, long diskSize, long maxUsers, - int maxFilesCount) { + int maxFilesCount, String tariffTerm) { Tariff tariff = new Tariff(); tariff.setName(tariffName); tariff.setPrice(price); @@ -29,6 +30,7 @@ public class TariffService { tariff.setDiskSize(diskSize); tariff.setMaxUsers(maxUsers); tariff.setMaxFilesCount(maxFilesCount); + tariff.setTariffTerm(TariffTimeTerm.valueOf(tariffTerm.toUpperCase())); tariffRepository.save(tariff); } @@ -42,6 +44,15 @@ public class TariffService { .collect(Collectors.toList()); } + public List getTariffByAccountTypeAndTariffTerm(User user, TariffTimeTerm tariffTerm) { + String typeAccount = user.canManageCompanySettings() ? "b2b": "b2c"; + + return tariffRepository.findByTariffAccountTypeAndTariffTerm(typeAccount, tariffTerm) + .stream() + .map(this::convertToDTO) + .collect(Collectors.toList()); + } + public List getTariffByType(String type) { return tariffRepository.findByTariffAccountType(type) .stream() @@ -99,7 +110,8 @@ public class TariffService { tariff.getTokens(), tariff.getMaxFilesCount(), tariff.getDiskSize(), - tariff.getMaxUsers() + tariff.getMaxUsers(), + tariff.getTariffTerm().name() ); } @@ -111,5 +123,6 @@ public class TariffService { tariff.setMaxFilesCount(dto.getMaxFilesCount()); tariff.setDiskSize(dto.getDiskSize()); tariff.setMaxUsers(dto.getMaxUsers()); + tariff.setTariffTerm(TariffTimeTerm.valueOf(dto.getTariffTerm().toUpperCase())); } }