dev split tariff by account types
Test Workflow / test (push) Successful in 3s

This commit is contained in:
vladp
2026-02-09 17:16:08 +07:00
parent 5a70c091f8
commit 7cc744829b
8 changed files with 82 additions and 23 deletions
@@ -85,7 +85,7 @@ public class UserController {
} }
if (user.canManageCompanySettings() || user.canLogin() && user.getCompany() == null) { if (user.canManageCompanySettings() || user.canLogin() && user.getCompany() == null) {
userDTO.setTariffs(tariffService.getAllTariffs()); userDTO.setTariffs(tariffService.getTariffByAccountType(user));
Long fileOnDisk = user.canManageCompanySettings() ? Long fileOnDisk = user.canManageCompanySettings() ?
fileStatsService.calculateCompanyFileSize(user.getId()): fileStatsService.calculateCompanyFileSize(user.getId()):
@@ -46,4 +46,7 @@ public class TariffRequest {
@JsonProperty("action") @JsonProperty("action")
private String action; private String action;
@JsonProperty("user_token")
private String userToken;
} }
@@ -37,4 +37,7 @@ public class Tariff {
@Column(name = "max_users") @Column(name = "max_users")
private Long maxUsers; private Long maxUsers;
@Column(name = "tariffAccountType")
private String tariffAccountType;
} }
@@ -2,5 +2,5 @@ package ru.soune.nocopy.entity.tarif;
public enum TariffType { public enum TariffType {
START, BASIC, PRO, ENTERPRISE, DEMO; START, BASIC, PRO, ENTERPRISE, DEMO, BUISNES, CORPORAT, STUDIO, FREE;
} }
@@ -10,6 +10,9 @@ 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.user.AuthToken;
import ru.soune.nocopy.entity.user.User;
import ru.soune.nocopy.repository.AuthTokenRepository;
import ru.soune.nocopy.service.tariff.TariffService; import ru.soune.nocopy.service.tariff.TariffService;
import java.util.List; import java.util.List;
@@ -24,6 +27,8 @@ public class TariffHandler implements RequestHandler {
private final TariffService tariffService; private final TariffService tariffService;
private final AuthTokenRepository authTokenRepository;
@Override @Override
public BaseResponse handle(BaseRequest request) throws Exception { public BaseResponse handle(BaseRequest request) throws Exception {
try { try {
@@ -113,7 +118,9 @@ public class TariffHandler implements RequestHandler {
} }
private BaseResponse handleGetTariffs(BaseRequest request, TariffRequest tariffRequest) { private BaseResponse handleGetTariffs(BaseRequest request, TariffRequest tariffRequest) {
List<TariffDTO> allTariffs = tariffService.getAllTariffs(); AuthToken authToken = authTokenRepository.findByToken(tariffRequest.getUserToken()).orElseThrow();
User user = authToken.getUser();
List<TariffDTO> allTariffs = tariffService.getTariffByAccountType(user);
return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(), return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(),
MessageCode.SUCCESS.getDescription(), MessageCode.SUCCESS.getDescription(),
@@ -12,5 +12,6 @@ import java.util.Optional;
public interface TariffRepository extends JpaRepository<Tariff, Long> { 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);
Tariff findByName(String name); Tariff findByName(String name);
} }
@@ -101,40 +101,44 @@ public class TariffInitializationService {
tariff.setType(type.name()); tariff.setType(type.name());
switch (type) { switch (type) {
case DEMO: case FREE:
tariff.setName("demo"); tariff.setName("free");
tariff.setPrice(demoPrice); tariff.setPrice(0);
tariff.setTokens(demoTokens); tariff.setTokens(30);
tariff.setMaxFilesCount(demoMaxFileCount); tariff.setMaxFilesCount(10);
tariff.setDiskSize(1024L * 1024 * 100); tariff.setDiskSize(1024L * 1024 * 100);
tariff.setMaxUsers(demoUserCount); tariff.setMaxUsers(1L);
tariff.setTariffAccountType("b2c");
break; break;
case START: case START:
tariff.setName("start"); tariff.setName("start");
tariff.setPrice(startPrice); tariff.setPrice(1200);
tariff.setTokens(startTokens); tariff.setTokens(300);
tariff.setMaxFilesCount(startMaxFileCount); tariff.setMaxFilesCount(80);
tariff.setDiskSize(1024L * 1024 * 500); tariff.setDiskSize(1024L * 1024 * 500);
tariff.setMaxUsers(startUserCount); tariff.setMaxUsers(1L);
tariff.setTariffAccountType("b2c");
break; break;
case PRO: case PRO:
tariff.setName("pro"); tariff.setName("pro");
tariff.setPrice(proPrice); tariff.setPrice(4250);
tariff.setTokens(proTokens); tariff.setTokens(900);
tariff.setMaxFilesCount(proMaxFileCount); tariff.setMaxFilesCount(300);
tariff.setDiskSize(1024L * 1024 * 1024 * 10L); tariff.setDiskSize(1024L * 1024 * 1024 * 10L);
tariff.setMaxUsers(proUserCount); tariff.setMaxUsers(1L);
tariff.setTariffAccountType("b2c");
break; break;
case ENTERPRISE: case STUDIO:
tariff.setName("premium"); tariff.setName("studio");
tariff.setPrice(enterpricePrice); tariff.setPrice(9750);
tariff.setTokens(enterpriceTokens); tariff.setTokens(3000);
tariff.setMaxFilesCount(enterpriceMaxFileCount); tariff.setMaxFilesCount(1000);
tariff.setDiskSize(1024L * 1024 * 1024 * 50L); tariff.setDiskSize(1024L * 1024 * 1024 * 50L);
tariff.setMaxUsers(enterpriceUserCount); tariff.setMaxUsers(2L);
tariff.setTariffAccountType("b2c");
break; break;
case BASIC: case BASIC:
@@ -144,6 +148,37 @@ public class TariffInitializationService {
tariff.setMaxFilesCount(enterpriceMaxFileCount); tariff.setMaxFilesCount(enterpriceMaxFileCount);
tariff.setDiskSize(1024L * 1024 * 1024 * 50L); tariff.setDiskSize(1024L * 1024 * 1024 * 50L);
tariff.setMaxUsers(basicUserCount); tariff.setMaxUsers(basicUserCount);
tariff.setTariffAccountType("b2c");
break;
case ENTERPRISE:
tariff.setName("enterprise");
tariff.setPrice(200000);
tariff.setTokens(30000);
tariff.setMaxFilesCount(100000);
tariff.setDiskSize(1024L * 1024 * 1024 * 10L);
tariff.setMaxUsers(10L);
tariff.setTariffAccountType("b2b");
break;
case BUISNES:
tariff.setName("buisnes");
tariff.setPrice(29000);
tariff.setTokens(5000);
tariff.setMaxFilesCount(5000);
tariff.setDiskSize(1024L * 1024 * 1024 * 50L);
tariff.setMaxUsers(5L);
tariff.setTariffAccountType("b2b");
break;
case CORPORAT:
tariff.setName("corporat");
tariff.setPrice(99000);
tariff.setTokens(20000);
tariff.setMaxFilesCount(50000);
tariff.setDiskSize(1024L * 1024 * 1024 * 50L);
tariff.setMaxUsers(10L);
tariff.setTariffAccountType("b2b");
break; break;
} }
@@ -6,6 +6,7 @@ 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.TariffType; import ru.soune.nocopy.entity.tarif.TariffType;
import ru.soune.nocopy.entity.user.User;
import ru.soune.nocopy.exception.TariffNotFoundException; import ru.soune.nocopy.exception.TariffNotFoundException;
import ru.soune.nocopy.repository.TariffRepository; import ru.soune.nocopy.repository.TariffRepository;
@@ -32,6 +33,15 @@ public class TariffService {
tariffRepository.save(tariff); tariffRepository.save(tariff);
} }
public List<TariffDTO> getTariffByAccountType(User user) {
String typeAccount = user.canManageCompanySettings() ? "b2b": "b2c";
return tariffRepository.findByTariffAccountType(typeAccount)
.stream()
.map(this::convertToDTO)
.collect(Collectors.toList());
}
public List<TariffDTO> getAllTariffs() { public List<TariffDTO> getAllTariffs() {
return tariffRepository.findAllByOrderByPriceAsc() return tariffRepository.findAllByOrderByPriceAsc()
.stream() .stream()