package ru.ulstu.fc.rule.service; import org.springframework.stereotype.Service; import ru.ulstu.fc.project.service.ProjectService; import ru.ulstu.fc.rule.model.FuzzyTerm; import ru.ulstu.fc.rule.model.FuzzyTermForm; import ru.ulstu.fc.rule.repository.FuzzyTermRepository; import java.util.Collections; import java.util.List; @Service public class FuzzyTermService { private final FuzzyTermRepository fuzzyTermRepository; private final VariableService variableService; private final ProjectService projectService; public FuzzyTermService(FuzzyTermRepository fuzzyTermRepository, VariableService variableService, ProjectService projectService) { this.fuzzyTermRepository = fuzzyTermRepository; this.variableService = variableService; this.projectService = projectService; } public FuzzyTerm getById(Integer id) { FuzzyTerm fuzzyTerm = fuzzyTermRepository .findById(id) .orElseThrow(() -> new RuntimeException("Term not found by id")); checkIsCurrentUserFuzzyTermWithThrow(fuzzyTerm); return fuzzyTerm; } public FuzzyTerm save(FuzzyTermForm fuzzyTermForm) { variableService.getById(fuzzyTermForm.getVariableId()); FuzzyTerm term; if (fuzzyTermForm.getId() == null || fuzzyTermForm.getId() == 0) { term = new FuzzyTerm(); } else { term = getById(fuzzyTermForm.getId()); } term.setDescription(fuzzyTermForm.getDescription().replaceAll(" ", "")); term.setCrispValue(fuzzyTermForm.getCrispValue()); FuzzyTerm ft = fuzzyTermRepository.save(term); if (fuzzyTermForm.getId() == null || fuzzyTermForm.getId() == 0) { variableService.addFuzzyTerm(fuzzyTermForm.getVariableId(), ft); } return ft; } public void delete(FuzzyTermForm fuzzyTermForm) { fuzzyTermRepository.delete(getById(fuzzyTermForm.getId())); } public List getByVariableId(Integer variableId) { if (variableId == null || variableId == 0) { return Collections.emptyList(); } return variableService.getById(variableId).getFuzzyTerms(); } public List getAll(Integer variableId) { variableService.getById(variableId); return getByVariableId(variableId); } public void checkIsCurrentUserFuzzyTermWithThrow(FuzzyTerm fuzzyTerm) { projectService.checkIsCurrentUserProjectWithThrow(fuzzyTermRepository.findByFuzzyTerm(fuzzyTerm).getProject()); } }