dev add additional info user
Test Workflow / test (push) Successful in 4s

This commit is contained in:
vladp
2026-03-25 12:46:33 +07:00
parent 46cf252699
commit c1782cf59b
11 changed files with 142 additions and 12 deletions
@@ -16,4 +16,5 @@ public class TariffDTO {
private int maxFilesCount; private int maxFilesCount;
private Long diskSize; private Long diskSize;
private Long maxUsers; private Long maxUsers;
private String tariffTerm;
} }
@@ -49,4 +49,7 @@ public class TariffRequest {
@JsonProperty("user_token") @JsonProperty("user_token")
private String userToken; private String userToken;
@JsonProperty("tariff_term")
private String tariffTerm;
} }
@@ -40,4 +40,8 @@ public class Tariff {
@Column(name = "tariffAccountType") @Column(name = "tariffAccountType")
private String tariffAccountType; private String tariffAccountType;
@Column(name = "tariff_term")
@Enumerated(EnumType.STRING)
private TariffTimeTerm tariffTerm;
} }
@@ -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;
}
}
@@ -2,6 +2,7 @@ package ru.soune.nocopy.entity.tarif;
public enum TariffType { 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; MONITORING_DAILY, MONITORING_WEEKLY, MONITORING_MONTHLY;
} }
@@ -10,6 +10,7 @@ import ru.soune.nocopy.dto.MessageCode;
import ru.soune.nocopy.dto.tarriff.TariffDTO; import ru.soune.nocopy.dto.tarriff.TariffDTO;
import ru.soune.nocopy.dto.tarriff.TariffRequest; import ru.soune.nocopy.dto.tarriff.TariffRequest;
import ru.soune.nocopy.dto.tarriff.TariffResponse; 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.AuthToken;
import ru.soune.nocopy.entity.user.User; import ru.soune.nocopy.entity.user.User;
import ru.soune.nocopy.repository.AuthTokenRepository; import ru.soune.nocopy.repository.AuthTokenRepository;
@@ -64,7 +65,7 @@ public class TariffHandler implements RequestHandler {
private BaseResponse handleAddTariff(BaseRequest request, TariffRequest tariffRequest) { private BaseResponse handleAddTariff(BaseRequest request, TariffRequest tariffRequest) {
tariffService.addTariff(tariffRequest.getName(), tariffRequest.getPrice(), tariffRequest.getType(), tariffService.addTariff(tariffRequest.getName(), tariffRequest.getPrice(), tariffRequest.getType(),
tariffRequest.getTokens(), tariffRequest.getDiskSize(), tariffRequest.getMaxUsers(), tariffRequest.getTokens(), tariffRequest.getDiskSize(), tariffRequest.getMaxUsers(),
tariffRequest.getMaxFilesCount()); tariffRequest.getMaxFilesCount(), tariffRequest.getTariffTerm());
TariffResponse tariffResponse = TariffResponse.builder() TariffResponse tariffResponse = TariffResponse.builder()
.tariffName(tariffRequest.getName()) .tariffName(tariffRequest.getName())
@@ -122,7 +123,8 @@ public class TariffHandler implements RequestHandler {
private BaseResponse handleGetTariffs(BaseRequest request, TariffRequest tariffRequest) { private BaseResponse handleGetTariffs(BaseRequest request, TariffRequest tariffRequest) {
AuthToken authToken = authTokenRepository.findByToken(tariffRequest.getUserToken()).orElseThrow(); AuthToken authToken = authTokenRepository.findByToken(tariffRequest.getUserToken()).orElseThrow();
User user = authToken.getUser(); User user = authToken.getUser();
List<TariffDTO> allTariffs = tariffService.getTariffByAccountType(user); List<TariffDTO> allTariffs = tariffService.getTariffByAccountTypeAndTariffTerm(user,
TariffTimeTerm.valueOf(tariffRequest.getTariffTerm().toUpperCase()));
return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(), return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(),
MessageCode.SUCCESS.getDescription(), MessageCode.SUCCESS.getDescription(),
@@ -12,6 +12,7 @@ import ru.soune.nocopy.dto.tarriff.TariffInfoRequest;
import ru.soune.nocopy.dto.tarriff.TariffInfoResponse; import ru.soune.nocopy.dto.tarriff.TariffInfoResponse;
import ru.soune.nocopy.entity.tarif.Tariff; import ru.soune.nocopy.entity.tarif.Tariff;
import ru.soune.nocopy.entity.tarif.TariffStatus; 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.entity.tarif.TariffType;
import ru.soune.nocopy.repository.TariffRepository; import ru.soune.nocopy.repository.TariffRepository;
import ru.soune.nocopy.service.tariff.TariffInfoService; import ru.soune.nocopy.service.tariff.TariffInfoService;
@@ -75,13 +76,14 @@ public class TariffInfoHandler implements RequestHandler {
try { try {
Long tariffId = tariffInfoRequest.getTariffId(); Long tariffId = tariffInfoRequest.getTariffId();
Tariff tariff= tariffRepository.findById(tariffId).orElseThrow(); Tariff tariff= tariffRepository.findById(tariffId).orElseThrow();
TariffTimeTerm tariffTerm = tariff.getTariffTerm();
LocalDateTime endDateTime = LocalDateTime.now().plusDays(tariffTerm.getDays());
TariffInfoDTO tariffInfoDTO = new TariffInfoDTO(null, TariffInfoDTO tariffInfoDTO = new TariffInfoDTO(null,
tariffInfoRequest.getStatus() != null ? tariffInfoRequest.getStatus() : TariffStatus.ACTIVE.name(), tariffInfoRequest.getStatus() != null ? tariffInfoRequest.getStatus() : TariffStatus.ACTIVE.name(),
tariffInfoRequest.getStartTariff() != null ? tariffInfoRequest.getStartTariff() : LocalDateTime.now(), tariffInfoRequest.getStartTariff() != null ? tariffInfoRequest.getStartTariff() : LocalDateTime.now(),
tariffInfoRequest.getEndTariff() != null ? tariffInfoRequest.getEndTariff() : LocalDateTime.now().plusDays(30), endDateTime, tariffInfoRequest.getTariffId(), tariff.getName(), tariff.getTokens(),
tariffInfoRequest.getTariffId(), tariff.getName(), tariff.getTokens(), tariff.getDiskSize(), 0L, tariff.getDiskSize(), 0L, 0, tariff.getMaxFilesCount());
0, tariff.getMaxFilesCount());
TariffInfoDTO createdTariffInfo = tariffInfoService.createTariffInfo(tariffInfoDTO); TariffInfoDTO createdTariffInfo = tariffInfoService.createTariffInfo(tariffInfoDTO);
@@ -3,6 +3,7 @@ package ru.soune.nocopy.repository;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import ru.soune.nocopy.entity.tarif.Tariff; 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.tarif.TariffType;
import java.util.List; import java.util.List;
@@ -13,5 +14,6 @@ public interface TariffRepository extends JpaRepository<Tariff, Long> {
Optional<Tariff> findByType(String type); Optional<Tariff> findByType(String type);
List<Tariff> findAllByOrderByPriceAsc(); List<Tariff> findAllByOrderByPriceAsc();
List<Tariff> findByTariffAccountType(String typeAccount); List<Tariff> findByTariffAccountType(String typeAccount);
List<Tariff> findByTariffAccountTypeAndTariffTerm(String typeAccount, TariffTimeTerm tariffTerm);
Tariff findByName(String name); Tariff findByName(String name);
} }
@@ -75,8 +75,8 @@ public class TariffInfoService {
public TariffInfo createTariffInfo(TariffType tariffType) { public TariffInfo createTariffInfo(TariffType tariffType) {
Tariff tariff = tariffRepository.findByType(tariffType.toString()).orElseThrow(); Tariff tariff = tariffRepository.findByType(tariffType.toString()).orElseThrow();
TariffInfo tariffInfo = createTariffInfo(LocalDateTime.now(), LocalDateTime.now().plusDays(30), TariffInfo tariffInfo = createTariffInfo(LocalDateTime.now(),
TariffStatus.ACTIVE, tariff.getTokens()); LocalDateTime.now().plusDays(tariff.getTariffTerm().getDays()), TariffStatus.ACTIVE, tariff.getTokens());
tariffInfo.setTariff(tariff); tariffInfo.setTariff(tariff);
return tariffInfoRepository.save(tariffInfo); return tariffInfoRepository.save(tariffInfo);
@@ -7,13 +7,12 @@ import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import ru.soune.nocopy.entity.tarif.Tariff; 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.tarif.TariffType;
import ru.soune.nocopy.repository.TariffRepository; import ru.soune.nocopy.repository.TariffRepository;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -109,6 +108,7 @@ public class TariffInitializationService {
tariff.setDiskSize(1024L * 1024 * 100); tariff.setDiskSize(1024L * 1024 * 100);
tariff.setMaxUsers(1L); tariff.setMaxUsers(1L);
tariff.setTariffAccountType("b2c"); tariff.setTariffAccountType("b2c");
tariff.setTariffTerm(TariffTimeTerm.MONTHLY);
break; break;
case START: case START:
@@ -119,6 +119,18 @@ public class TariffInitializationService {
tariff.setDiskSize(1024L * 1024 * 500); tariff.setDiskSize(1024L * 1024 * 500);
tariff.setMaxUsers(1L); tariff.setMaxUsers(1L);
tariff.setTariffAccountType("b2c"); 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; break;
case PRO: case PRO:
@@ -129,8 +141,21 @@ public class TariffInitializationService {
tariff.setDiskSize(1024L * 1024 * 1024 * 10L); tariff.setDiskSize(1024L * 1024 * 1024 * 10L);
tariff.setMaxUsers(1L); tariff.setMaxUsers(1L);
tariff.setTariffAccountType("b2c"); tariff.setTariffAccountType("b2c");
tariff.setTariffTerm(TariffTimeTerm.MONTHLY);
break; 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: case STUDIO:
tariff.setName("studio"); tariff.setName("studio");
tariff.setPrice(9750); tariff.setPrice(9750);
@@ -139,6 +164,18 @@ public class TariffInitializationService {
tariff.setDiskSize(1024L * 1024 * 1024 * 50L); tariff.setDiskSize(1024L * 1024 * 1024 * 50L);
tariff.setMaxUsers(2L); tariff.setMaxUsers(2L);
tariff.setTariffAccountType("b2c"); 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; break;
case BASIC: case BASIC:
@@ -149,6 +186,18 @@ public class TariffInitializationService {
tariff.setDiskSize(1024L * 1024 * 1024 * 50L); tariff.setDiskSize(1024L * 1024 * 1024 * 50L);
tariff.setMaxUsers(basicUserCount); tariff.setMaxUsers(basicUserCount);
tariff.setTariffAccountType("b2c"); 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; break;
case ENTERPRISE: case ENTERPRISE:
@@ -159,6 +208,18 @@ public class TariffInitializationService {
tariff.setDiskSize(1024L * 1024 * 1024 * 10L); tariff.setDiskSize(1024L * 1024 * 1024 * 10L);
tariff.setMaxUsers(10L); tariff.setMaxUsers(10L);
tariff.setTariffAccountType("b2b"); 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; break;
case BUISNES: case BUISNES:
@@ -169,8 +230,21 @@ public class TariffInitializationService {
tariff.setDiskSize(1024L * 1024 * 1024 * 50L); tariff.setDiskSize(1024L * 1024 * 1024 * 50L);
tariff.setMaxUsers(5L); tariff.setMaxUsers(5L);
tariff.setTariffAccountType("b2b"); tariff.setTariffAccountType("b2b");
tariff.setTariffTerm(TariffTimeTerm.MONTHLY);
break; 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: case CORPORAT:
tariff.setName("corporat"); tariff.setName("corporat");
tariff.setPrice(99000); tariff.setPrice(99000);
@@ -179,8 +253,21 @@ public class TariffInitializationService {
tariff.setDiskSize(1024L * 1024 * 1024 * 50L); tariff.setDiskSize(1024L * 1024 * 1024 * 50L);
tariff.setMaxUsers(10L); tariff.setMaxUsers(10L);
tariff.setTariffAccountType("b2b"); tariff.setTariffAccountType("b2b");
tariff.setTariffTerm(TariffTimeTerm.MONTHLY);
break; 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: case TOKEN_100:
tariff.setName("token_100"); tariff.setName("token_100");
tariff.setPrice(299); tariff.setPrice(299);
@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import ru.soune.nocopy.dto.tarriff.TariffDTO; import ru.soune.nocopy.dto.tarriff.TariffDTO;
import ru.soune.nocopy.entity.tarif.Tariff; 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.tarif.TariffType;
import ru.soune.nocopy.entity.user.User; import ru.soune.nocopy.entity.user.User;
import ru.soune.nocopy.exception.TariffNotFoundException; import ru.soune.nocopy.exception.TariffNotFoundException;
@@ -20,7 +21,7 @@ public class TariffService {
private final TariffRepository tariffRepository; private final TariffRepository tariffRepository;
public void addTariff(String tariffName, double price, String type, int tokens, long diskSize, long maxUsers, 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 tariff = new Tariff();
tariff.setName(tariffName); tariff.setName(tariffName);
tariff.setPrice(price); tariff.setPrice(price);
@@ -29,6 +30,7 @@ public class TariffService {
tariff.setDiskSize(diskSize); tariff.setDiskSize(diskSize);
tariff.setMaxUsers(maxUsers); tariff.setMaxUsers(maxUsers);
tariff.setMaxFilesCount(maxFilesCount); tariff.setMaxFilesCount(maxFilesCount);
tariff.setTariffTerm(TariffTimeTerm.valueOf(tariffTerm.toUpperCase()));
tariffRepository.save(tariff); tariffRepository.save(tariff);
} }
@@ -42,6 +44,15 @@ public class TariffService {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
public List<TariffDTO> 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<TariffDTO> getTariffByType(String type) { public List<TariffDTO> getTariffByType(String type) {
return tariffRepository.findByTariffAccountType(type) return tariffRepository.findByTariffAccountType(type)
.stream() .stream()
@@ -99,7 +110,8 @@ public class TariffService {
tariff.getTokens(), tariff.getTokens(),
tariff.getMaxFilesCount(), tariff.getMaxFilesCount(),
tariff.getDiskSize(), tariff.getDiskSize(),
tariff.getMaxUsers() tariff.getMaxUsers(),
tariff.getTariffTerm().name()
); );
} }
@@ -111,5 +123,6 @@ public class TariffService {
tariff.setMaxFilesCount(dto.getMaxFilesCount()); tariff.setMaxFilesCount(dto.getMaxFilesCount());
tariff.setDiskSize(dto.getDiskSize()); tariff.setDiskSize(dto.getDiskSize());
tariff.setMaxUsers(dto.getMaxUsers()); tariff.setMaxUsers(dto.getMaxUsers());
tariff.setTariffTerm(TariffTimeTerm.valueOf(dto.getTariffTerm().toUpperCase()));
} }
} }