diff --git a/src/main/java/com/backend/unifier/title/service/resource/SearchResource.java b/src/main/java/com/backend/unifier/title/service/resource/SearchResource.java index e4668c1..9a1faa1 100644 --- a/src/main/java/com/backend/unifier/title/service/resource/SearchResource.java +++ b/src/main/java/com/backend/unifier/title/service/resource/SearchResource.java @@ -11,7 +11,7 @@ import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.QueryParam; -@Path("/search") +@Path("/") public class SearchResource { private final KodikSearchService kodikSearchService; private final KodikResponseConvertService kodikConvertService; @@ -23,10 +23,18 @@ public class SearchResource { } @GET + @Path("/search") public Uni search(@QueryParam("title") String title) { return kodikSearchService.searchAsync(title) .onItem().ifNotNull() .transformToUni(response -> kodikConvertService.convertAsync(response)); } + @GET + @Path("/search-fast") + public SearchResponseDTO searchFast(@QueryParam("title") String title) { + var result = kodikSearchService.search(title); + return kodikConvertService.convert(result); + } + } diff --git a/src/main/java/com/backend/unifier/title/service/service/KodikResponseConvertService.java b/src/main/java/com/backend/unifier/title/service/service/KodikResponseConvertService.java index 80ee3f3..7326c19 100644 --- a/src/main/java/com/backend/unifier/title/service/service/KodikResponseConvertService.java +++ b/src/main/java/com/backend/unifier/title/service/service/KodikResponseConvertService.java @@ -1,7 +1,6 @@ package com.backend.unifier.title.service.service; import java.util.List; -import java.util.stream.Collectors; import org.mapstruct.factory.Mappers; @@ -18,13 +17,15 @@ public class KodikResponseConvertService { private final KodikResponseMapper responseMapper = Mappers.getMapper(KodikResponseMapper.class); private final PosterUrlValidator posterUrlValidator; + private final PosterUrlNormalizer posterUrlNormalizer; - public KodikResponseConvertService(PosterUrlValidator posterUrlValidator) { + public KodikResponseConvertService(PosterUrlValidator posterUrlValidator, PosterUrlNormalizer posterUrlNormalizer) { this.posterUrlValidator = posterUrlValidator; + this.posterUrlNormalizer = posterUrlNormalizer; } public SearchResponseDTO convert(KodikResponse response) { - return responseMapper.toSearchResponseDTO(response); + return convertSimple(response); } @SuppressWarnings("unchecked") @@ -33,7 +34,7 @@ public class KodikResponseConvertService { return Uni.createFrom().item(new SearchResponseDTO(List.of())); } - List> entries = responseMapper.toSearchResponseDTO(response).result() + List> entries = convertSimple(response).result() .stream() .map(this::resolveEntryPosters) .toList(); @@ -47,4 +48,17 @@ public class KodikResponseConvertService { .map(entry::withPosterURLs) .onFailure().recoverWithItem(entry); } + + private SearchResponseDTO convertSimple(KodikResponse response) { + return normalizeUrls(responseMapper.toSearchResponseDTO(response)); + } + + private SearchResponseDTO normalizeUrls(SearchResponseDTO response) { + var normalizedResults = response.result().stream() + .map(r -> r.withPosterURLs(r.posterURLs().stream() + .map(posterUrlNormalizer::normalize) + .toList())) + .toList(); + return response.withResult(normalizedResults); + } } diff --git a/src/main/java/com/backend/unifier/title/service/service/PosterUrlNormalizer.java b/src/main/java/com/backend/unifier/title/service/service/PosterUrlNormalizer.java new file mode 100644 index 0000000..594dc77 --- /dev/null +++ b/src/main/java/com/backend/unifier/title/service/service/PosterUrlNormalizer.java @@ -0,0 +1,15 @@ +package com.backend.unifier.title.service.service; + +import jakarta.enterprise.context.ApplicationScoped; + +@ApplicationScoped +public class PosterUrlNormalizer { + public String normalize(String url) { + if (url == null) + return null; + if (url.contains("shikimori")) { + return url.replaceFirst("https?://[^/]*shikimori[^/]*/", "https://shikimori.io/"); + } + return url; + } +} diff --git a/src/main/java/com/backend/unifier/title/service/service/PosterUrlValidator.java b/src/main/java/com/backend/unifier/title/service/service/PosterUrlValidator.java index a3013b2..b3d1591 100644 --- a/src/main/java/com/backend/unifier/title/service/service/PosterUrlValidator.java +++ b/src/main/java/com/backend/unifier/title/service/service/PosterUrlValidator.java @@ -33,9 +33,8 @@ public class PosterUrlValidator { return Uni.createFrom().item(List.of()); } - List normalized = urls.stream().map(this::normalizeDomain).toList(); - return findFirstReachable(normalized, 0) - .map(firstIndex -> reorderToFront(normalized, firstIndex)); + return findFirstReachable(urls, 0) + .map(firstIndex -> reorderToFront(urls, firstIndex)); } private Uni findFirstReachable(List urls, int index) { @@ -54,13 +53,6 @@ public class PosterUrlValidator { return reordered; } - private String normalizeDomain(String url) { - if (url == null) - return null; - return url.contains("shikimori") ? url.replaceFirst("https?://[^/]*shikimori[^/]*/", "https://shikimori.io/") - : url; - } - private Uni isReachable(String url) { if (url == null || url.isEmpty()) { return Uni.createFrom().item(false);