Wrap with SearchService and ListService

This commit is contained in:
2026-03-22 02:52:07 +05:00
parent 474b088dba
commit b84d1961df
12 changed files with 151 additions and 27 deletions

View File

@@ -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();

View File

@@ -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()

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -0,0 +1,7 @@
package com.backend.unifier.title.service;
import com.backend.unifier.title.model.ContentProviderSource;
public interface ContentProvider {
ContentProviderSource source();
}

View File

@@ -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<ListService> listServices;
public GeneralListService(Instance<ListService> 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);
}
}

View File

@@ -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<SearchService> searchServices;
public GeneralSearchService(Instance<SearchService> 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);
}
}

View File

@@ -0,0 +1,7 @@
package com.backend.unifier.title.service;
import com.backend.unifier.title.model.SearchEntries;
public interface ListService extends ContentProvider {
SearchEntries list();
}

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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);
}
}