diff --git a/src/main/java/NTNU/IDATT1002/repository/AlbumRepository.java b/src/main/java/NTNU/IDATT1002/repository/AlbumRepository.java index 4952a2156a40f0983271401024bf8e6ca7d6d685..8a7c5bbe05465c033fbbf970a35e2b4b674c1aff 100644 --- a/src/main/java/NTNU/IDATT1002/repository/AlbumRepository.java +++ b/src/main/java/NTNU/IDATT1002/repository/AlbumRepository.java @@ -16,9 +16,11 @@ import java.util.List; public class AlbumRepository extends AbstractRepository<Album, Long> { /** - * Mapping to @NamedQuery 'find all albums by users username' defined in {@link Album} + * Mapping to @NamedQuery 'find all albums by username, tags, and title' defined in {@link Album} */ public static final String ALBUM_FIND_BY_USERNAME = "Album.findAllByUsername"; + public static final String ALBUM_FIND_BY_TAGS = "Album.findByTags"; + public static final String ALBUM_FIND_BY_TITLE = "Album.findByTitle"; /** * Constructor to inject {@link EntityManager} dependency and sets the class type to {@link Album} @@ -42,4 +44,17 @@ public class AlbumRepository extends AbstractRepository<Album, Long> { .getResultList(); } + public List<Album> findAllByTags(String tag){ + return entityManager.createNamedQuery(ALBUM_FIND_BY_TAGS, Album.class) + .setParameter("name",tag) + .getResultList(); + } + + public List<Album> findAllByTitle(String title){ + return entityManager.createNamedQuery(ALBUM_FIND_BY_TITLE, Album.class) + .setParameter("title", title) + .getResultList(); + } + + } diff --git a/src/main/java/NTNU/IDATT1002/repository/ImageRepository.java b/src/main/java/NTNU/IDATT1002/repository/ImageRepository.java index bdb25bddd9fdcbd494394494564834b3669b9c93..1d9b3ff76d27f41df580955434b7610b475d59b7 100644 --- a/src/main/java/NTNU/IDATT1002/repository/ImageRepository.java +++ b/src/main/java/NTNU/IDATT1002/repository/ImageRepository.java @@ -19,7 +19,7 @@ import java.util.List; public class ImageRepository extends AbstractRepository<Image, Long> { /** - * Mapping to @NamedQuery 'find all albums by users username' defined in {@link Image} + * Mapping to @NamedQuery 'find all albums by username and tags' defined in {@link Image} */ public static final String IMAGE_FIND_BY_USERNAME = "Image.findAllByUsername"; public static final String IMAGE_FIND_BY_TAG = "Image.findByTags"; diff --git a/src/main/java/NTNU/IDATT1002/service/AlbumService.java b/src/main/java/NTNU/IDATT1002/service/AlbumService.java index 3f0ed9a8275353899fbc08cddbe367328a9b7ef2..6689e970622c9b498b9cc47d3411e8dee583ad23 100644 --- a/src/main/java/NTNU/IDATT1002/service/AlbumService.java +++ b/src/main/java/NTNU/IDATT1002/service/AlbumService.java @@ -12,6 +12,7 @@ import javax.persistence.EntityManager; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; /** @@ -114,4 +115,32 @@ public class AlbumService { return document; } + /** + * Takes in a string and searched through all album by tags, username and title to find results + * @param query + * @return list of results without duplocates + */ + + public List<Album> searchResult(String query){ + List<Album> allFound = new ArrayList<>(); + List<Album> byTags = albumRepository.findAllByTags(query); + List<Album> byUsername = albumRepository.findAllByUsername(query); + List<Album> byTitle = albumRepository.findAllByTitle(query); + allFound.addAll(byTags); + allFound.addAll(byUsername); + allFound.addAll(byTitle); + return removeDuplicates(allFound); + } + + + /** + * takes a list and removes all duplicate elements + * @param albums + * @return list without duplicates + */ + + public List<Album> removeDuplicates(List<Album> albums){ + return albums.stream().distinct().collect(Collectors.toList()); + } + }