diff --git a/src/main/java/ru/nbch/indicsearchservice/service/IndicSearchService.java b/src/main/java/ru/nbch/indicsearchservice/service/IndicSearchService.java index 366586f..41b177e 100644 --- a/src/main/java/ru/nbch/indicsearchservice/service/IndicSearchService.java +++ b/src/main/java/ru/nbch/indicsearchservice/service/IndicSearchService.java @@ -1,14 +1,40 @@ package ru.nbch.indicsearchservice.service; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import ru.nbch.indicsearchservice.dto.request.AddSearchJobRequestDto; import ru.nbch.indicsearchservice.dto.response.AddSearchJobResponseDto; import ru.nbch.indicsearchservice.dto.response.JobStatusResponseDto; +import ru.nbch.indicsearchservice.service.tableloader.AbstractTableLoader; +import ru.nbch.indicsearchservice.service.tableloader.TableLoaderName; +import ru.nbch.indicsearchservice.util.TableData; @Service public class IndicSearchService { + private final List tableLoaders; + + public IndicSearchService(List tableLoaders) { + this.tableLoaders = tableLoaders; + } + public AddSearchJobResponseDto addSearchJob(AddSearchJobRequestDto request) { + List foundTableLoaderNames = TableLoaderName + .getTableLoaderNamesByDataTypeAndSearchParameter(request.getDataType(), request.getSearchParameter()); + + List suitableTableLoaders = tableLoaders.stream() + .filter(tl -> foundTableLoaderNames.contains(tl.getTableLoaderName()) || foundTableLoaderNames.contains(tl.getChildLoaders())) + .toList(); + + List result = new ArrayList<>(); + for (AbstractTableLoader tableLoader : suitableTableLoaders) { + TableData tableData = tableLoader.fetchData(Map.of()); + tableLoader.fetchChildLoaders(tableData); + result.add(tableData); + } + return null; } diff --git a/src/main/java/ru/nbch/indicsearchservice/service/tableloader/AbstractTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/service/tableloader/AbstractTableLoader.java new file mode 100644 index 0000000..4a00d24 --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/service/tableloader/AbstractTableLoader.java @@ -0,0 +1,17 @@ +package ru.nbch.indicsearchservice.service.tableloader; + +import java.util.List; +import java.util.Map; +import ru.nbch.indicsearchservice.util.TableData; + +public abstract class AbstractTableLoader { + public abstract TableLoaderName getTableLoaderName(); + + public abstract List getChildLoaders(); + + public abstract TableData fetchData(Map inputData); + + public abstract void fetchChildLoaders(TableData tableData); + + public abstract Long countData(Map inputData); +} diff --git a/src/main/java/ru/nbch/indicsearchservice/service/tableloader/RuTradeTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/service/tableloader/RuTradeTableLoader.java new file mode 100644 index 0000000..969bd01 --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/service/tableloader/RuTradeTableLoader.java @@ -0,0 +1,27 @@ +package ru.nbch.indicsearchservice.service.tableloader; + +import java.util.List; +import java.util.Map; +import ru.nbch.indicsearchservice.util.TableData; + +public class RuTradeTableLoader extends AbstractTableLoader { + @Override + public TableLoaderName getTableLoaderName() { + return TableLoaderName.RU_TRADE; + } + + @Override + public List getChildLoaders() { + return List.of(); + } + + @Override + public TableData fetchData(Map inputData) { + return null; + } + + @Override + public Long countData(Map inputData) { + return 0L; + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/service/tableloader/RuUidTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/service/tableloader/RuUidTableLoader.java new file mode 100644 index 0000000..d386e40 --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/service/tableloader/RuUidTableLoader.java @@ -0,0 +1,38 @@ +package ru.nbch.indicsearchservice.service.tableloader; + +import java.util.List; +import java.util.Map; +import org.springframework.stereotype.Component; +import ru.nbch.indicsearchservice.util.TableData; + +@Component +public class RuUidTableLoader extends AbstractTableLoader { + @Override + public TableLoaderName getTableLoaderName() { + return TableLoaderName.RU_UID; + } + + @Override + public List getChildLoaders() { + return List.of(TableLoaderName.RU_TRADE); + } + + @Override + public TableData fetchData(Map inputData) { + return null; + } + + @Override + public void fetchChildLoaders(TableData tableData) { + Object val = tableData.getFieldData().stream().anyMatch(fieldDataDto -> fieldDataDto.key().equals("serialNumber")); + } + + @Override + public Long countData(Map inputData) { + return 0L; + } + + public void collector(List> mapperQueryResult, Subject subject) { + subject.addResultByTable() + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/service/tableloader/TableLoaderName.java b/src/main/java/ru/nbch/indicsearchservice/service/tableloader/TableLoaderName.java new file mode 100644 index 0000000..8f6e21c --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/service/tableloader/TableLoaderName.java @@ -0,0 +1,44 @@ +package ru.nbch.indicsearchservice.service.tableloader; + +import java.util.ArrayList; +import java.util.List; +import ru.nbch.indicsearchservice.model.enums.DataType; +import ru.nbch.indicsearchservice.model.enums.SearchParameter; + +public enum TableLoaderName { + RU_UID( // 1st level table + List.of(DataType.GUTDF, DataType.RUTDF, DataType.TUTDF), + List.of(SearchParameter.FID) + ), + RU_TRADE(List.of(), List.of()), // 2nd level table + ; + + private final List suitableForDataType; + private final List suitableForSearchParameter; + + TableLoaderName(List suitableForDataType, List suitableForSearchParameter) { + this.suitableForDataType = suitableForDataType; + this.suitableForSearchParameter = suitableForSearchParameter; + } + + public List getSuitableForDataType() { + return suitableForDataType; + } + + public List getSuitableForSearchParameter() { + return suitableForSearchParameter; + } + + public static List getTableLoaderNamesByDataTypeAndSearchParameter(DataType dataType, SearchParameter searchParameter) { + List result = new ArrayList<>(); + + for (TableLoaderName tableLoaderName : TableLoaderName.values()) { + if (tableLoaderName.getSuitableForDataType().contains(dataType) && + tableLoaderName.getSuitableForSearchParameter().contains(searchParameter)) { + result.add(tableLoaderName); + } + } + + return result; + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/util/TableData.java b/src/main/java/ru/nbch/indicsearchservice/util/TableData.java new file mode 100644 index 0000000..82a37ec --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/util/TableData.java @@ -0,0 +1,57 @@ +package ru.nbch.indicsearchservice.util; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class TableData { + private String tableName; + private List fieldData = new ArrayList<>(); + private List relatedData = new ArrayList<>(); + + public TableData() { + } + + public TableData(String tableName, List fieldData, List relatedData) { + this.tableName = tableName; + this.fieldData = fieldData; + this.relatedData = relatedData; + } + + public String getTableName() { + return tableName; + } + + public List getFieldData() { + return fieldData; + } + + public List getRelatedData() { + return relatedData; + } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) return false; + TableData tableData = (TableData) o; + return Objects.equals(tableName, tableData.tableName) && Objects.equals(fieldData, tableData.fieldData) && Objects.equals(relatedData, tableData.relatedData); + } + + @Override + public int hashCode() { + return Objects.hash(tableName, fieldData, relatedData); + } + + @Override + public String toString() { + return "TableData{" + + "tableName='" + tableName + '\'' + + ", fieldData=" + fieldData + + ", relatedData=" + relatedData + + '}'; + } + + public record FieldDataDto(String key, + Object value) { + } +}