1 package de.dlr.shepard.common.search.services;
2
3 import de.dlr.shepard.auth.users.entities.User;
4 import de.dlr.shepard.auth.users.services.UserService;
5 import de.dlr.shepard.common.neo4j.entities.BasicContainer;
6 import de.dlr.shepard.common.neo4j.io.BasicContainerIO;
7 import de.dlr.shepard.common.search.daos.SearchDAO;
8 import de.dlr.shepard.common.search.io.ContainerSearchBody;
9 import de.dlr.shepard.common.search.io.ContainerSearchParams;
10 import de.dlr.shepard.common.search.io.ContainerSearchResult;
11 import de.dlr.shepard.common.search.query.Neo4jQueryBuilder;
12 import de.dlr.shepard.common.search.query.QueryValidator;
13 import de.dlr.shepard.common.util.PaginationHelper;
14 import de.dlr.shepard.common.util.SortingHelper;
15 import jakarta.enterprise.context.RequestScoped;
16 import jakarta.inject.Inject;
17 import java.util.List;
18
19 @RequestScoped
20 public class ContainerSearchService {
21
22 @Inject
23 SearchDAO searchDAO;
24
25 @Inject
26 UserService userService;
27
28 public ContainerSearchResult search(
29 ContainerSearchBody containerSearchBody,
30 PaginationHelper pagination,
31 SortingHelper sortOrder
32 ) {
33 User user = userService.getCurrentUser();
34
35 ContainerSearchParams containerSearchParams = containerSearchBody.getSearchParams();
36 QueryValidator.checkQuery(containerSearchBody.getSearchParams().getQuery());
37 String neo4jSelectionQuery = Neo4jQueryBuilder.containerSelectionQueryWithNeo4jId(
38 containerSearchParams.getQuery(),
39 containerSearchParams.getQueryType(),
40 sortOrder,
41 user.getUsername()
42 );
43 List<BasicContainerIO> resultList = findContainerList(neo4jSelectionQuery, containerSearchParams, pagination);
44 Integer totalResultCount = searchDAO.getContainerTotalCount(
45 neo4jSelectionQuery,
46 containerSearchParams.getQueryType().getTypeAlias()
47 );
48 ContainerSearchResult containerSearchResult = new ContainerSearchResult(
49 resultList,
50 containerSearchBody.getSearchParams(),
51 totalResultCount
52 );
53 return containerSearchResult;
54 }
55
56 private List<BasicContainerIO> findContainerList(
57 String neo4jSelectionQuery,
58 ContainerSearchParams searchParams,
59 PaginationHelper pagination
60 ) {
61 List<BasicContainer> resultContainers = searchDAO.findContainers(
62 neo4jSelectionQuery,
63 pagination,
64 searchParams.getQueryType().getTypeAlias()
65 );
66 List<BasicContainerIO> ret = resultContainers.stream().map(BasicContainerIO::new).toList();
67 return ret;
68 }
69 }