2026-01-30 12:52:16 +07:00
|
|
|
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;
|
|
|
|
|
|
2026-02-02 15:00:18 +07:00
|
|
|
public void addTariff(String tariffName, double price, String type, int tokens, long diskSize, long maxUsers,
|
|
|
|
|
int maxFilesCount) {
|
2026-01-30 12:52:16 +07:00
|
|
|
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);
|
|
|
|
|
|
2026-02-02 15:00:18 +07:00
|
|
|
tariffRepository.save(tariff);
|
2026-01-30 12:52:16 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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) {
|
2026-01-30 22:36:20 +07:00
|
|
|
return tariffRepository.findByType(type.toString())
|
2026-01-30 12:52:16 +07:00
|
|
|
.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());
|
|
|
|
|
}
|
|
|
|
|
}
|