From b84d1961df36896b95b16bd96193cd2ca9a822c2 Mon Sep 17 00:00:00 2001 From: bivashy Date: Sun, 22 Mar 2026 02:52:07 +0500 Subject: [PATCH] Wrap with `SearchService` and `ListService` --- ...{KodikSearchService.java => KodikAPI.java} | 2 +- .../title/health/KodikServiceHealthCheck.java | 6 +-- .../unifier/title/resource/ListResource.java | 24 +++++++++++ .../title/resource/SearchResource.java | 31 ++++---------- .../title/service/ContentProvider.java | 7 ++++ .../title/service/GeneralListService.java | 24 +++++++++++ .../title/service/GeneralSearchService.java | 25 +++++++++++ .../unifier/title/service/ListService.java | 7 ++++ .../unifier/title/service/SearchService.java | 7 ++++ .../KodikResponseConvertService.java | 4 +- .../title/service/kodik/KodikService.java | 41 +++++++++++++++++++ .../service/service/PosterUrlNormalizer.java | 0 12 files changed, 151 insertions(+), 27 deletions(-) rename src/main/java/com/backend/unifier/title/api/{KodikSearchService.java => KodikAPI.java} (96%) create mode 100644 src/main/java/com/backend/unifier/title/resource/ListResource.java create mode 100644 src/main/java/com/backend/unifier/title/service/ContentProvider.java create mode 100644 src/main/java/com/backend/unifier/title/service/GeneralListService.java create mode 100644 src/main/java/com/backend/unifier/title/service/GeneralSearchService.java create mode 100644 src/main/java/com/backend/unifier/title/service/ListService.java create mode 100644 src/main/java/com/backend/unifier/title/service/SearchService.java rename src/main/java/com/backend/unifier/title/service/{ => kodik}/KodikResponseConvertService.java (92%) create mode 100644 src/main/java/com/backend/unifier/title/service/kodik/KodikService.java create mode 100644 src/main/java/com/backend/unifier/title/service/service/PosterUrlNormalizer.java diff --git a/src/main/java/com/backend/unifier/title/api/KodikSearchService.java b/src/main/java/com/backend/unifier/title/api/KodikAPI.java similarity index 96% rename from src/main/java/com/backend/unifier/title/api/KodikSearchService.java rename to src/main/java/com/backend/unifier/title/api/KodikAPI.java index 0a4a5a5..ef17629 100644 --- a/src/main/java/com/backend/unifier/title/api/KodikSearchService.java +++ b/src/main/java/com/backend/unifier/title/api/KodikAPI.java @@ -12,7 +12,7 @@ import jakarta.ws.rs.QueryParam; @Path("/kodik") @RegisterRestClient(baseUri = "stork://kodik-metadata-service") -public interface KodikSearchService { +public interface KodikAPI { @GET @Path("/list") KodikResponse list(); diff --git a/src/main/java/com/backend/unifier/title/health/KodikServiceHealthCheck.java b/src/main/java/com/backend/unifier/title/health/KodikServiceHealthCheck.java index cf44110..73dcf2c 100644 --- a/src/main/java/com/backend/unifier/title/health/KodikServiceHealthCheck.java +++ b/src/main/java/com/backend/unifier/title/health/KodikServiceHealthCheck.java @@ -9,7 +9,7 @@ import org.eclipse.microprofile.health.Readiness; import org.eclipse.microprofile.rest.client.inject.RestClient; import com.backend.metadata.kodik.api.model.KodikResponse; -import com.backend.unifier.title.api.KodikSearchService; +import com.backend.unifier.title.api.KodikAPI; import jakarta.enterprise.context.ApplicationScoped; @@ -17,14 +17,14 @@ import jakarta.enterprise.context.ApplicationScoped; @ApplicationScoped public class KodikServiceHealthCheck implements HealthCheck { @RestClient - KodikSearchService kodikService; + KodikAPI kodikAPI; @Override public HealthCheckResponse call() { HealthCheckResponseBuilder responseBuilder = HealthCheckResponse.named("Kodik Service Connection"); try { - KodikResponse response = kodikService.search("Хеллсинг"); + KodikResponse response = kodikAPI.search("Хеллсинг"); return responseBuilder .up() diff --git a/src/main/java/com/backend/unifier/title/resource/ListResource.java b/src/main/java/com/backend/unifier/title/resource/ListResource.java new file mode 100644 index 0000000..42ad09c --- /dev/null +++ b/src/main/java/com/backend/unifier/title/resource/ListResource.java @@ -0,0 +1,24 @@ +package com.backend.unifier.title.resource; + +import com.backend.unifier.title.model.ContentProviderSource; +import com.backend.unifier.title.model.SearchEntries; +import com.backend.unifier.title.service.GeneralListService; + +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; + +@Path("/list") +public class ListResource { + private final GeneralListService listService; + + public ListResource(GeneralListService listService) { + this.listService = listService; + } + + @GET + @Path("/kodik") + public SearchEntries list() { + return listService.list(ContentProviderSource.KODIK); + } + +} diff --git a/src/main/java/com/backend/unifier/title/resource/SearchResource.java b/src/main/java/com/backend/unifier/title/resource/SearchResource.java index 9e4aa91..f36a1e1 100644 --- a/src/main/java/com/backend/unifier/title/resource/SearchResource.java +++ b/src/main/java/com/backend/unifier/title/resource/SearchResource.java @@ -1,38 +1,25 @@ package com.backend.unifier.title.resource; -import org.eclipse.microprofile.rest.client.inject.RestClient; - -import com.backend.unifier.title.api.KodikSearchService; +import com.backend.unifier.title.model.ContentProviderSource; import com.backend.unifier.title.model.SearchEntries; -import com.backend.unifier.title.service.KodikResponseConvertService; +import com.backend.unifier.title.service.GeneralSearchService; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.QueryParam; -@Path("/") +@Path("/search") public class SearchResource { - private final KodikSearchService kodikSearchService; - private final KodikResponseConvertService kodikConvertService; + private final GeneralSearchService searchService; - public SearchResource(@RestClient KodikSearchService kodikSearchService, - KodikResponseConvertService kodikConvertService) { - this.kodikSearchService = kodikSearchService; - this.kodikConvertService = kodikConvertService; + public SearchResource(GeneralSearchService searchService) { + this.searchService = searchService; } @GET - @Path("/search") - public SearchEntries searchFast(@QueryParam("title") String title) { - var result = kodikSearchService.search(title); - return kodikConvertService.convert(result); - } - - @GET - @Path("/list") - public SearchEntries list() { - var result = kodikSearchService.list(); - return kodikConvertService.convert(result); + @Path("/kodik") + public SearchEntries searchKodik(@QueryParam("title") String title) { + return searchService.search(ContentProviderSource.KODIK, title); } } diff --git a/src/main/java/com/backend/unifier/title/service/ContentProvider.java b/src/main/java/com/backend/unifier/title/service/ContentProvider.java new file mode 100644 index 0000000..4a6e1cd --- /dev/null +++ b/src/main/java/com/backend/unifier/title/service/ContentProvider.java @@ -0,0 +1,7 @@ +package com.backend.unifier.title.service; + +import com.backend.unifier.title.model.ContentProviderSource; + +public interface ContentProvider { + ContentProviderSource source(); +} diff --git a/src/main/java/com/backend/unifier/title/service/GeneralListService.java b/src/main/java/com/backend/unifier/title/service/GeneralListService.java new file mode 100644 index 0000000..d62471c --- /dev/null +++ b/src/main/java/com/backend/unifier/title/service/GeneralListService.java @@ -0,0 +1,24 @@ +package com.backend.unifier.title.service; + +import com.backend.unifier.title.model.ContentProviderSource; +import com.backend.unifier.title.model.SearchEntries; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Instance; + +@ApplicationScoped +public class GeneralListService { + private final Instance listServices; + + public GeneralListService(Instance listServices) { + this.listServices = listServices; + } + + public SearchEntries list(ContentProviderSource source) { + for (ListService listService : listServices) { + if (listService.source() == source) + return listService.list(); + } + throw new IllegalStateException("cannot find list service for source: " + source); + } +} diff --git a/src/main/java/com/backend/unifier/title/service/GeneralSearchService.java b/src/main/java/com/backend/unifier/title/service/GeneralSearchService.java new file mode 100644 index 0000000..be9ff58 --- /dev/null +++ b/src/main/java/com/backend/unifier/title/service/GeneralSearchService.java @@ -0,0 +1,25 @@ +package com.backend.unifier.title.service; + +import com.backend.unifier.title.model.ContentProviderSource; +import com.backend.unifier.title.model.SearchEntries; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Instance; + +@ApplicationScoped +public class GeneralSearchService { + private final Instance searchServices; + + public GeneralSearchService(Instance searchServices) { + this.searchServices = searchServices; + } + + public SearchEntries search(ContentProviderSource source, String title) { + for (SearchService service : searchServices) { + if (service.source() == source) + return service.search(title); + } + throw new IllegalStateException("cannot find search implementation for source: " + source); + } + +} diff --git a/src/main/java/com/backend/unifier/title/service/ListService.java b/src/main/java/com/backend/unifier/title/service/ListService.java new file mode 100644 index 0000000..bec8cab --- /dev/null +++ b/src/main/java/com/backend/unifier/title/service/ListService.java @@ -0,0 +1,7 @@ +package com.backend.unifier.title.service; + +import com.backend.unifier.title.model.SearchEntries; + +public interface ListService extends ContentProvider { + SearchEntries list(); +} diff --git a/src/main/java/com/backend/unifier/title/service/SearchService.java b/src/main/java/com/backend/unifier/title/service/SearchService.java new file mode 100644 index 0000000..1737f33 --- /dev/null +++ b/src/main/java/com/backend/unifier/title/service/SearchService.java @@ -0,0 +1,7 @@ +package com.backend.unifier.title.service; + +import com.backend.unifier.title.model.SearchEntries; + +public interface SearchService extends ContentProvider { + SearchEntries search(String title); +} diff --git a/src/main/java/com/backend/unifier/title/service/KodikResponseConvertService.java b/src/main/java/com/backend/unifier/title/service/kodik/KodikResponseConvertService.java similarity index 92% rename from src/main/java/com/backend/unifier/title/service/KodikResponseConvertService.java rename to src/main/java/com/backend/unifier/title/service/kodik/KodikResponseConvertService.java index fbb9b02..bf2fc41 100644 --- a/src/main/java/com/backend/unifier/title/service/KodikResponseConvertService.java +++ b/src/main/java/com/backend/unifier/title/service/kodik/KodikResponseConvertService.java @@ -1,4 +1,4 @@ -package com.backend.unifier.title.service; +package com.backend.unifier.title.service.kodik; import java.util.UUID; @@ -8,6 +8,8 @@ import com.backend.metadata.kodik.api.model.KodikResponse; import com.backend.unifier.title.mapper.KodikResponseMapper; import com.backend.unifier.title.model.ContentProviderSource; import com.backend.unifier.title.model.SearchEntries; +import com.backend.unifier.title.service.IdentifierMaskService; +import com.backend.unifier.title.service.PosterUrlNormalizer; import jakarta.enterprise.context.ApplicationScoped; diff --git a/src/main/java/com/backend/unifier/title/service/kodik/KodikService.java b/src/main/java/com/backend/unifier/title/service/kodik/KodikService.java new file mode 100644 index 0000000..d3a0f36 --- /dev/null +++ b/src/main/java/com/backend/unifier/title/service/kodik/KodikService.java @@ -0,0 +1,41 @@ +package com.backend.unifier.title.service.kodik; + +import org.eclipse.microprofile.rest.client.inject.RestClient; + +import com.backend.unifier.title.api.KodikAPI; +import com.backend.unifier.title.model.ContentProviderSource; +import com.backend.unifier.title.model.SearchEntries; +import com.backend.unifier.title.service.ListService; +import com.backend.unifier.title.service.SearchService; + +import jakarta.enterprise.context.ApplicationScoped; + +@ApplicationScoped +public class KodikService implements ListService, SearchService { + private final KodikAPI kodikAPI; + private final KodikResponseConvertService kodikConvertService; + + public KodikService(@RestClient KodikAPI kodikAPI, + KodikResponseConvertService kodikConvertService) { + this.kodikAPI = kodikAPI; + this.kodikConvertService = kodikConvertService; + } + + @Override + public ContentProviderSource source() { + return ContentProviderSource.KODIK; + } + + @Override + public SearchEntries search(String title) { + var response = kodikAPI.search(title); + return kodikConvertService.convert(response); + } + + @Override + public SearchEntries list() { + var response = kodikAPI.list(); + return kodikConvertService.convert(response); + } + +} 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..e69de29