#2 -- Add async-await
All checks were successful
CI fuzzy controller / container-test-job (push) Successful in 1m48s

This commit is contained in:
Anton Romanov 2025-03-03 20:15:30 +04:00
parent 7339ca4062
commit efd0cb66c7
6 changed files with 100 additions and 63 deletions

View File

@ -29,13 +29,13 @@ public class ProjectVariableService {
if (projectId == null || projectId == 0) {
return Collections.emptyList();
}
return variableRepository.findInputByProject(projectService.getById(projectId));
return variableRepository.getInputByProject(projectService.getById(projectId));
}
public List<Variable> getOutputByProjectId(Integer projectId) {
if (projectId == null || projectId == 0) {
return Collections.emptyList();
}
return variableRepository.findOutputByProject(projectService.getById(projectId));
return variableRepository.getOutputByProject(projectService.getById(projectId));
}
}

View File

@ -71,6 +71,22 @@ public class FuzzyRuleController {
return variableService.getAllDtoByProject(projectId);
}
@ResponseBody
@GetMapping("/getInputVariables/{projectId}")
public List<VariableDto> getInputVariables(@PathVariable("projectId") Integer projectId,
final HttpServletResponse response) {
response.addHeader("Cache-Control", "max-age=60, must-revalidate, no-transform");
return variableService.getInputVariablesDtoByProject(projectId);
}
@ResponseBody
@GetMapping("/getOutputVariables/{projectId}")
public List<VariableDto> getOutputVariables(@PathVariable("projectId") Integer projectId,
final HttpServletResponse response) {
response.addHeader("Cache-Control", "max-age=60, must-revalidate, no-transform");
return variableService.getOutputVariablesDtoByProject(projectId);
}
@ResponseBody
@GetMapping("/getFuzzyTerms/{variableId}")
public List<FuzzyTerm> getTerms(@PathVariable("variableId") Integer variableId,

View File

@ -15,8 +15,8 @@ public interface VariableRepository extends JpaRepository<Variable, Integer> {
List<Variable> getByProject(Project project);
@Query("SELECT v FROM Variable v WHERE v.project = :project AND v.input = true")
List<Variable> findInputByProject(@Param("project") Project project);
List<Variable> getInputByProject(@Param("project") Project project);
@Query("SELECT v FROM Variable v WHERE v.project = :project AND v.input = false")
List<Variable> findOutputByProject(@Param("project") Project project);
List<Variable> getOutputByProject(@Param("project") Project project);
}

View File

@ -80,4 +80,18 @@ public class VariableService {
public void checkIsCurrentUserVariableWithThrow(Variable variable) {
projectService.checkIsCurrentUserProjectWithThrow(variable.getProject());
}
public List<VariableDto> getInputVariablesDtoByProject(Integer projectId) {
return variableRepository.getInputByProject(projectService.getById(projectId))
.stream()
.map(VariableDto::new)
.toList();
}
public List<VariableDto> getOutputVariablesDtoByProject(Integer projectId) {
return variableRepository.getOutputByProject(projectService.getById(projectId))
.stream()
.map(VariableDto::new)
.toList();
}
}

View File

@ -62,15 +62,12 @@ function errorHandler(response, callBack, errorCallBack) {
}
/* exported getFromRest */
function getFromRest(url, callBack) {
$.ajax({
async function getFromRest(url) {
return await $.ajax({
url: url,
method: 'get',
cache: true,
dataType: 'json',
success: function (response) {
errorHandler(response, callBack);
}
dataType: 'json'
});
}
@ -112,60 +109,63 @@ function fillSelect(selectElement, values, selectedVal) {
$(selectElement).append($("<option />").val(value.id).text(value.name));
});
$(selectElement).children().each(function () {
if ($(this).text() == selectedVal) {
if ($(this).text() === selectedVal) {
$(this).prop('selected', true);
}
});
}
function fillFuzzyTerms(variablesElement, fuzzyTermsElement, termVal) {
getFromRest("/rule/getFuzzyTerms/" + $(variablesElement).val(), function (fuzzyTerms) {
let fuzzyTermsData = [];
$.each(fuzzyTerms, function (key, value) {
fuzzyTermsData.push({
id: value.id,
name: value.description
});
async function fillFuzzyTerms(variablesElement, fuzzyTermsElement, termVal) {
let fuzzyTerms = await getFromRest("/rule/getFuzzyTerms/" + $(variablesElement).val());
let fuzzyTermsData = [];
$.each(fuzzyTerms, function (key, value) {
fuzzyTermsData.push({
id: value.id,
name: value.description
});
fillSelect(fuzzyTermsElement, fuzzyTermsData, termVal);
$(fuzzyTermsElement).selectpicker("refresh");
$(fuzzyTermsElement).trigger("change");
});
fillSelect(fuzzyTermsElement, fuzzyTermsData, termVal);
}
function fillVariables(projectId, variablesElement, variableVal) {
getFromRest("/rule/getVariables/" + projectId, function (variables) {
let variablesData = [];
$.each(variables, function (key, value) {
variablesData.push({
id: value.id,
name: value.name
});
async function fillVariables(projectId, variablesElement, variableVal, cls) {
let url = '/rule/';
if (cls === 'inputVar') {
url += 'getInputVariables/';
} else {
url += 'getOutputVariables/';
}
let variables = await getFromRest(url + projectId);
let variablesData = [];
$.each(variables, function (key, value) {
variablesData.push({
id: value.id,
name: value.name
});
fillSelect(variablesElement, variablesData, variableVal);
$(variablesElement).selectpicker("refresh");
$(variablesElement).trigger("change");
});
fillSelect(variablesElement, variablesData, variableVal);
}
function variableValueChanged(variablesElement, fuzzyTermsElement) {
fillFuzzyTerms(variablesElement, fuzzyTermsElement);
}
function fuzzyTermsValueChanged() {
async function variableValueChanged(variablesElement, fuzzyTermsElement) {
await fillFuzzyTerms(variablesElement, fuzzyTermsElement);
$(".selectpicker").selectpicker("refresh");
createRule();
}
function createVariableSelect(cls, projectId, variableVal) {
function fuzzyTermsValueChanged() {
$(".selectpicker").selectpicker("refresh");
createRule();
}
async function createVariableSelect(cls, projectId, variableVal) {
let variablesElement = $("<select class='selectpicker " + cls + " m-2' data-live-search='true data-width='70%'></select>");
fillVariables(projectId, variablesElement, variableVal);
await fillVariables(projectId, variablesElement, variableVal, cls);
return variablesElement;
}
function createFuzzyTermsSelect(cls, variablesElement, termVal) {
async function createFuzzyTermsSelect(cls, variablesElement, termVal) {
let fuzzyTermsElement = $("<select class='selectpicker " + cls + " m-2' data-live-search='true data-width='70%'></select>");
if ($(variablesElement).val()) {
fillFuzzyTerms(variablesElement, fuzzyTermsElement, termVal);
await fillFuzzyTerms(variablesElement, fuzzyTermsElement, termVal);
}
return fuzzyTermsElement;
}
@ -180,15 +180,15 @@ function removeConsequent(buttonElement) {
fuzzyTermsValueChanged();
}
function addAntecedent(parentElement, projectId, variableVal, termVal) {
async function addAntecedent(parentElement, projectId, variableVal, termVal) {
let rowElement = $("<div class='row'></div>");
if ($(parentElement).find('.row').length) {
$(rowElement).append("<label class='col col-md-1 m-2'>И</label>");
} else {
$(rowElement).append("<label class='col col-md-1 m-2'> </label>");
}
let variablesElement = createVariableSelect('inputVar', projectId, variableVal);
let fuzzyTermsElement = createFuzzyTermsSelect('inputVal', variablesElement, termVal);
let variablesElement = await createVariableSelect('inputVar', projectId, variableVal);
let fuzzyTermsElement = await createFuzzyTermsSelect('inputVal', variablesElement, termVal);
$(variablesElement).on("change", function () {
variableValueChanged(variablesElement, fuzzyTermsElement)
});
@ -204,17 +204,17 @@ function addAntecedent(parentElement, projectId, variableVal, termVal) {
$(parentElement).append(rowElement);
}
function addConsequent(parentElement, projectId, variableVal, termVal) {
async function addConsequent(parentElement, projectId, variableVal, termVal) {
let rowElement = $("<div class='row'></div>");
if ($(parentElement).find('.row').length) {
$(rowElement).append("<label class='col col-md-1 m-2'>И</label>");
} else {
$(rowElement).append("<label class='col col-md-1 m-2'> </label>");
}
let variablesElement = createVariableSelect('outVar', projectId, variableVal);
let fuzzyTermsElement = createFuzzyTermsSelect('outVal', variablesElement, termVal);
$(variablesElement).on("change", function () {
variableValueChanged(variablesElement, fuzzyTermsElement)
let variablesElement = await createVariableSelect('outVar', projectId, variableVal);
let fuzzyTermsElement = await createFuzzyTermsSelect('outVal', variablesElement, termVal);
$(variablesElement).on("change", async function () {
await variableValueChanged(variablesElement, fuzzyTermsElement)
});
$(fuzzyTermsElement).on("change", function () {
fuzzyTermsValueChanged()
@ -228,18 +228,31 @@ function addConsequent(parentElement, projectId, variableVal, termVal) {
$(parentElement).append(rowElement);
}
function addAntecedentFromRule(parentElement, projectId, ruleContent) {
async function addAntecedentFromRule(parentElement, projectId, ruleContent) {
let antecedentComponents = getRuleComponents(getAntecedent(ruleContent));
for (let i = 0; i < antecedentComponents.length; i++) {
let a = antecedentComponents[i];
addAntecedent(parentElement, projectId, getVariable(a), getVariableValue(a));
await addAntecedent(parentElement, projectId, getVariable(a), getVariableValue(a));
}
}
function addConsequentFromRule(parentElement, projectId, ruleContent) {
async function addConsequentFromRule(parentElement, projectId, ruleContent) {
let consequentComponents = getRuleComponents(getConsequent(ruleContent));
for (let i = 0; i < consequentComponents.length; i++) {
let c = consequentComponents[i];
addConsequent(parentElement, projectId, getVariable(c), getVariableValue(c));
await addConsequent(parentElement, projectId, getVariable(c), getVariableValue(c));
}
}
async function initSelects() {
let ruleContentEl = $('#ruleContent');
let projectIdEl = $('#projectId');
if ($(ruleContentEl).val()) {
await addAntecedentFromRule($('#rulesAntecedent'), $(projectIdEl).val(), $(ruleContentEl).val());
await addConsequentFromRule($('#rulesConsequent'), $(projectIdEl).val(), $(ruleContentEl).val());
} else {
await addAntecedent($('#rulesAntecedent'), $(projectIdEl).val());
await addConsequent($('#rulesConsequent'), $(projectIdEl).val());
}
$(".selectpicker").selectpicker("refresh");
}

View File

@ -50,15 +50,9 @@
</div>
<script type="text/javascript" src="/js/fuzzyRule.js"></script>
<script type="text/javascript">
let ruleContentEl = $('#ruleContent');
let projectIdEl = $('#projectId');
if ($(ruleContentEl).val()) {
addAntecedentFromRule($('#rulesAntecedent'), $(projectIdEl).val(), $(ruleContentEl).val());
addConsequentFromRule($('#rulesConsequent'), $(projectIdEl).val(), $(ruleContentEl).val());
} else {
addAntecedent($('#rulesAntecedent'), $(projectIdEl).val());
addConsequent($('#rulesConsequent'), $(projectIdEl).val());
}
(async () => {
await initSelects();
})();
</script>
</form>
</div>