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.search.daos.SearchDAO;
6 import de.dlr.shepard.common.search.endpoints.BasicCollectionAttributes;
7 import de.dlr.shepard.common.search.query.Neo4jQueryBuilder;
8 import de.dlr.shepard.common.search.query.QueryValidator;
9 import de.dlr.shepard.common.util.PaginationHelper;
10 import de.dlr.shepard.common.util.SearchConstants;
11 import de.dlr.shepard.common.util.SortingHelper;
12 import de.dlr.shepard.context.collection.entities.Collection;
13 import jakarta.enterprise.context.RequestScoped;
14 import jakarta.inject.Inject;
15 import java.util.List;
16 import java.util.Optional;
17
18 @RequestScoped
19 public class CollectionSearchService {
20
21 @Inject
22 SearchDAO searchDAO;
23
24 @Inject
25 UserService userService;
26
27 public PaginatedCollectionList search(
28 String collectionSearchQuery,
29 Optional<Integer> page,
30 Optional<Integer> pageSize,
31 BasicCollectionAttributes orderBy,
32 Boolean orderDesc
33 ) {
34 User user = userService.getCurrentUser();
35
36 QueryValidator.checkQuery(collectionSearchQuery);
37 PaginationHelper pagination = null;
38 if (page.isPresent() && pageSize.isPresent()) pagination = new PaginationHelper(page.get(), pageSize.get());
39 String neo4jSelectionQuery = Neo4jQueryBuilder.collectionSelectionQueryWithNeo4jId(
40 collectionSearchQuery,
41 user.getUsername(),
42 new SortingHelper(orderBy, orderDesc)
43 );
44 List<Collection> resultList = searchDAO.findCollections(
45 neo4jSelectionQuery,
46 pagination,
47 SearchConstants.COLLECTION_IN_QUERY
48 );
49 Integer totalResultCount = searchDAO.getCollectionTotalCount(
50 neo4jSelectionQuery,
51 SearchConstants.COLLECTION_IN_QUERY
52 );
53 return new PaginatedCollectionList(
54 resultList,
55 totalResultCount,
56 collectionSearchQuery,
57 page,
58 pageSize,
59 orderBy,
60 orderDesc
61 );
62 }
63 }