diff --git a/backend/src/main/java/com/vaessl/app/search/HomeboxSearchProvider.java b/backend/src/main/java/com/vaessl/app/search/HomeboxSearchProvider.java index 5131092..ae39217 100644 --- a/backend/src/main/java/com/vaessl/app/search/HomeboxSearchProvider.java +++ b/backend/src/main/java/com/vaessl/app/search/HomeboxSearchProvider.java @@ -14,6 +14,7 @@ import com.vaessl.app.connection.ConnectionRepository; import com.vaessl.app.connection.HomeboxEntity; import com.vaessl.app.exception.ConnectionNotFoundException; import com.vaessl.app.exception.RemoteApiException; +import com.vaessl.app.shared.ServiceItem; import com.vaessl.app.shared.ServiceType; import static com.vaessl.app.shared.Endpoint.*; @@ -37,7 +38,7 @@ public class HomeboxSearchProvider implements SearchProvider { } @Override - public Page getSearchResults(SearchRequest request, Pageable pageable) { + public Page getSearchResults(SearchRequest request, Pageable pageable) { ConnectionEntity entity = cRepository.findByAppUrlAndUsername(request.appUrl(), request.username()); @@ -58,12 +59,12 @@ public class HomeboxSearchProvider implements SearchProvider { throw new RemoteApiException(request.appUrl(), HOMEBOX_QUERY_ALL_ITEMS.getValue()); } - List items = hbResponse.items().stream().map(i -> { + List items = hbResponse.items().stream().map(i -> { String id = i.id(); String title = i.name(); String description = i.description(); Map extraSearchResponseData = Map.of("location", i.parent()); - return new SearchResponse(id, title, description, extraSearchResponseData); + return new ServiceItem(id, title, description, extraSearchResponseData); }).toList(); return new PageImpl<>(items, pageable, hbResponse.total()); diff --git a/backend/src/main/java/com/vaessl/app/search/SearchController.java b/backend/src/main/java/com/vaessl/app/search/SearchController.java index a96f47f..dcf205b 100644 --- a/backend/src/main/java/com/vaessl/app/search/SearchController.java +++ b/backend/src/main/java/com/vaessl/app/search/SearchController.java @@ -8,7 +8,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; - +import com.vaessl.app.shared.ServiceItem; import com.vaessl.app.shared.SessionKeys; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; @@ -26,7 +26,7 @@ public class SearchController { * there is no active session. */ @PostMapping("/search") - public ResponseEntity> search( + public ResponseEntity> search( @Valid @RequestBody SearchRequest request, @PageableDefault(size = 20) Pageable pageable, HttpServletRequest httpReq) { HttpSession session = httpReq.getSession(false); @@ -35,7 +35,7 @@ public class SearchController { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } - Page result = searchService.search(request, pageable); + Page result = searchService.search(request, pageable); return ResponseEntity.ok(PagedSearchResponse.from(result)); } diff --git a/backend/src/main/java/com/vaessl/app/search/SearchProvider.java b/backend/src/main/java/com/vaessl/app/search/SearchProvider.java index 8b5d042..c3e39ae 100644 --- a/backend/src/main/java/com/vaessl/app/search/SearchProvider.java +++ b/backend/src/main/java/com/vaessl/app/search/SearchProvider.java @@ -2,7 +2,7 @@ package com.vaessl.app.search; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; - +import com.vaessl.app.shared.ServiceItem; import com.vaessl.app.shared.ServiceProvider; /** @@ -17,5 +17,5 @@ public interface SearchProvider extends ServiceProvider { * @param pageable the Pageable interface * @return a list of Page items matching the query */ - Page getSearchResults(SearchRequest request, Pageable pageable); + Page getSearchResults(SearchRequest request, Pageable pageable); } diff --git a/backend/src/main/java/com/vaessl/app/search/SearchService.java b/backend/src/main/java/com/vaessl/app/search/SearchService.java index 105c403..6afd886 100644 --- a/backend/src/main/java/com/vaessl/app/search/SearchService.java +++ b/backend/src/main/java/com/vaessl/app/search/SearchService.java @@ -7,6 +7,7 @@ import java.util.Map; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import com.vaessl.app.shared.ServiceItem; import com.vaessl.app.shared.ServiceType; import com.vaessl.app.exception.WrongServiceTypeException; @@ -32,7 +33,7 @@ public class SearchService { * @return results returned by the matching provider * @throws WrongServiceTypeException if no provider is registered for the given service type */ - public Page search(SearchRequest request, Pageable pageable) { + public Page search(SearchRequest request, Pageable pageable) { SearchProvider provider = providerRegistry.get(request.serviceType()); diff --git a/backend/src/main/java/com/vaessl/app/search/SearchResponse.java b/backend/src/main/java/com/vaessl/app/shared/ServiceItem.java similarity index 66% rename from backend/src/main/java/com/vaessl/app/search/SearchResponse.java rename to backend/src/main/java/com/vaessl/app/shared/ServiceItem.java index 5327334..951fb46 100644 --- a/backend/src/main/java/com/vaessl/app/search/SearchResponse.java +++ b/backend/src/main/java/com/vaessl/app/shared/ServiceItem.java @@ -1,8 +1,9 @@ -package com.vaessl.app.search; +package com.vaessl.app.shared; import java.util.Map; +import jakarta.validation.constraints.NotNull; -public record SearchResponse(String id, String title, String description, +public record ServiceItem(String id, @NotNull String title, String description, Map extraData) { public String getExtra(String key) { diff --git a/backend/src/test/java/com/vaessl/app/search/SearchResponseTest.java b/backend/src/test/java/com/vaessl/app/search/SearchResponseTest.java index 0970e25..115bdef 100644 --- a/backend/src/test/java/com/vaessl/app/search/SearchResponseTest.java +++ b/backend/src/test/java/com/vaessl/app/search/SearchResponseTest.java @@ -4,12 +4,13 @@ import static com.vaessl.app.Mockdata.*; import static org.assertj.core.api.Assertions.assertThat; import java.util.Map; import org.junit.jupiter.api.Test; +import com.vaessl.app.shared.ServiceItem; class SearchResponseTest { @Test void shouldReturnNullWhenExtraDataIsNull() { - SearchResponse response = new SearchResponse(MOCK_ID, MOCK_TITLE, MOCK_DESCRIPTION, null); + ServiceItem response = new ServiceItem(MOCK_ID, MOCK_TITLE, MOCK_DESCRIPTION, null); assertThat(response.getExtra(null)).isNull(); } @@ -17,7 +18,7 @@ class SearchResponseTest { @Test void shouldReturnNullWhenExtraDataKeyIsMissing() { - SearchResponse response = new SearchResponse(MOCK_ID, MOCK_TITLE, MOCK_DESCRIPTION, Map.of("key", "value")); + ServiceItem response = new ServiceItem(MOCK_ID, MOCK_TITLE, MOCK_DESCRIPTION, Map.of("key", "value")); assertThat(response.getExtra("missing")).isNull(); } @@ -25,7 +26,7 @@ class SearchResponseTest { @Test void shouldReturnExtraDataValue() { - SearchResponse response = new SearchResponse(MOCK_ID, MOCK_TITLE, MOCK_DESCRIPTION, Map.of("key", "value")); + ServiceItem response = new ServiceItem(MOCK_ID, MOCK_TITLE, MOCK_DESCRIPTION, Map.of("key", "value")); assertThat(response.id()).isEqualTo(MOCK_ID); assertThat(response.getExtra("key")).contains("value");