Move package com.backend.metadata.kodik.service to com.backend.metadata.kodik
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
package com.backend.metadata.kodik.service;
|
||||
package com.backend.metadata.kodik;
|
||||
|
||||
import org.eclipse.microprofile.config.inject.ConfigProperty;
|
||||
import org.jboss.logging.Logger;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.backend.metadata.kodik.service;
|
||||
package com.backend.metadata.kodik;
|
||||
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.backend.metadata.kodik.service.api;
|
||||
package com.backend.metadata.kodik.api;
|
||||
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.backend.metadata.kodik.service.api;
|
||||
package com.backend.metadata.kodik.api;
|
||||
|
||||
import com.backend.metadata.kodik.service.api.model.KodikResponse;
|
||||
import com.backend.metadata.kodik.api.model.KodikResponse;
|
||||
|
||||
import io.github.easyretrofit.core.annotation.RetrofitBuilder;
|
||||
import retrofit2.Call;
|
||||
@@ -10,6 +10,21 @@ import retrofit2.http.POST;
|
||||
|
||||
@RetrofitBuilder(baseUrl = "${kodik.api.url}", addConverterFactory = { JacksonConvertFactoryBuilder.class })
|
||||
public interface KodikAPI {
|
||||
@FormUrlEncoded
|
||||
@POST("list")
|
||||
Call<KodikResponse> list(
|
||||
@Field("token") String token,
|
||||
@Field("limit") int limit,
|
||||
@Field("with_material_data") int withMaterialData);
|
||||
|
||||
@FormUrlEncoded
|
||||
@POST("list")
|
||||
Call<KodikResponse> list(
|
||||
@Field("token") String token,
|
||||
@Field("next") String next,
|
||||
@Field("limit") int limit,
|
||||
@Field("with_material_data") int withMaterialData);
|
||||
|
||||
@FormUrlEncoded
|
||||
@POST("search")
|
||||
Call<KodikResponse> search(
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.backend.metadata.kodik.service.api.model;
|
||||
package com.backend.metadata.kodik.api.model;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -9,6 +9,10 @@ import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
public class KodikResponse {
|
||||
public int total;
|
||||
public List<Result> results;
|
||||
@JsonProperty("prev_page")
|
||||
public String previousPage;
|
||||
@JsonProperty("next_page")
|
||||
public String nextPage;
|
||||
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public static class Result {
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.backend.metadata.kodik.service.api.model;
|
||||
package com.backend.metadata.kodik.api.model;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.backend.metadata.kodik.service.resource;
|
||||
package com.backend.metadata.kodik.resource;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -6,10 +6,10 @@ import javax.naming.ServiceUnavailableException;
|
||||
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
import com.backend.metadata.kodik.service.api.KodikAPI;
|
||||
import com.backend.metadata.kodik.service.api.model.KodikResponse;
|
||||
import com.backend.metadata.kodik.service.service.KodikAPITokenProvider;
|
||||
import com.backend.metadata.kodik.service.service.KodikSearchFilterService;
|
||||
import com.backend.metadata.kodik.api.KodikAPI;
|
||||
import com.backend.metadata.kodik.api.model.KodikResponse;
|
||||
import com.backend.metadata.kodik.service.KodikAPITokenProvider;
|
||||
import com.backend.metadata.kodik.service.KodikSearchFilterService;
|
||||
|
||||
import io.quarkiverse.retrofit.runtime.EnableRetrofit;
|
||||
import jakarta.ws.rs.BadRequestException;
|
||||
@@ -19,7 +19,7 @@ import jakarta.ws.rs.PathParam;
|
||||
import jakarta.ws.rs.QueryParam;
|
||||
import retrofit2.Response;
|
||||
|
||||
@EnableRetrofit("com.backend.metadata.kodik.service.api")
|
||||
@EnableRetrofit("com.backend.metadata.kodik.api")
|
||||
@Path("/kodik")
|
||||
public class SearchResource {
|
||||
private static final Logger LOG = Logger.getLogger(SearchResource.class);
|
||||
@@ -34,6 +34,24 @@ public class SearchResource {
|
||||
this.searchFilterService = searchFilterService;
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/list")
|
||||
public KodikResponse list() throws ServiceUnavailableException {
|
||||
try {
|
||||
Response<KodikResponse> response = kodikAPI.list(tokenProvider.getKodikToken(), 100, 1).execute();
|
||||
if (!response.isSuccessful()) {
|
||||
LOG.errorv("failed list request with response code {0}, message {1}",
|
||||
response.code(),
|
||||
response.message());
|
||||
throw new BadRequestException("bad response, code: " + response.code());
|
||||
}
|
||||
return filterResults(response.body());
|
||||
} catch (IOException e) {
|
||||
LOG.warn("i/o error", e);
|
||||
throw new ServiceUnavailableException("i/o error");
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/search")
|
||||
public KodikResponse search(@QueryParam("title") String title) throws ServiceUnavailableException {
|
||||
@@ -45,7 +63,7 @@ public class SearchResource {
|
||||
response.message());
|
||||
throw new BadRequestException("bad response, code: " + response.code());
|
||||
}
|
||||
return searchFilterService.filter(response.body());
|
||||
return filterResults(response.body());
|
||||
} catch (IOException e) {
|
||||
LOG.warn("i/o error", e);
|
||||
throw new ServiceUnavailableException("i/o error");
|
||||
@@ -63,7 +81,7 @@ public class SearchResource {
|
||||
response.code(), response.message());
|
||||
throw new BadRequestException("bad response, code: " + response.code());
|
||||
}
|
||||
return searchFilterService.filter(response.body());
|
||||
return filterResults(response.body());
|
||||
} catch (IOException e) {
|
||||
LOG.warn("i/o error", e);
|
||||
throw new ServiceUnavailableException("i/o error");
|
||||
@@ -81,7 +99,7 @@ public class SearchResource {
|
||||
response.code(), response.message());
|
||||
throw new BadRequestException("bad response, code: " + response.code());
|
||||
}
|
||||
return searchFilterService.filter(response.body());
|
||||
return filterResults(response.body());
|
||||
} catch (IOException e) {
|
||||
LOG.warn("i/o error", e);
|
||||
throw new ServiceUnavailableException("i/o error");
|
||||
@@ -99,7 +117,7 @@ public class SearchResource {
|
||||
response.code(), response.message());
|
||||
throw new BadRequestException("bad response, code: " + response.code());
|
||||
}
|
||||
return searchFilterService.filter(response.body());
|
||||
return filterResults(response.body());
|
||||
} catch (IOException e) {
|
||||
LOG.warn("i/o error", e);
|
||||
throw new ServiceUnavailableException("i/o error");
|
||||
@@ -116,11 +134,16 @@ public class SearchResource {
|
||||
response.code(), response.message());
|
||||
throw new BadRequestException("bad response, code: " + response.code());
|
||||
}
|
||||
return searchFilterService.filter(response.body());
|
||||
return filterResults(response.body());
|
||||
} catch (IOException e) {
|
||||
LOG.warn("i/o error", e);
|
||||
throw new ServiceUnavailableException("i/o error");
|
||||
}
|
||||
}
|
||||
|
||||
private KodikResponse filterResults(KodikResponse response) {
|
||||
response.results = searchFilterService.filter(response.results);
|
||||
return response;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.backend.metadata.kodik.service.service;
|
||||
package com.backend.metadata.kodik.service;
|
||||
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
import org.eclipse.microprofile.config.inject.ConfigProperty;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.backend.metadata.kodik.service.service;
|
||||
package com.backend.metadata.kodik.service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@@ -9,7 +9,7 @@ import java.util.Set;
|
||||
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
import com.backend.metadata.kodik.service.api.model.KodikResponse;
|
||||
import com.backend.metadata.kodik.api.model.KodikResponse;
|
||||
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
|
||||
@@ -19,21 +19,28 @@ public class KodikSearchFilterService {
|
||||
private static final Logger LOG = Logger.getLogger(KodikSearchFilterService.class);
|
||||
private static final Set<String> ALLOWED_TYPES = Set.of("anime-serial", "anime");
|
||||
|
||||
public KodikResponse filter(KodikResponse body) {
|
||||
Objects.requireNonNull(body, "KodikResponse body cannot be null");
|
||||
Objects.requireNonNull(body.results, "KodikResponse.results cannot be null");
|
||||
public List<KodikResponse.Result> filter(List<KodikResponse.Result> target) {
|
||||
return filter(target, new HashSet<>());
|
||||
}
|
||||
|
||||
public List<KodikResponse.Result> filter(List<KodikResponse.Result> target, List<KodikResponse.Result> fullSeen) {
|
||||
Set<String> seenIds = new HashSet<>();
|
||||
for (KodikResponse.Result seen : fullSeen) {
|
||||
seenIds.add(identifier(seen));
|
||||
}
|
||||
return filter(target, seenIds);
|
||||
}
|
||||
|
||||
public List<KodikResponse.Result> filter(List<KodikResponse.Result> target, Set<String> seenIds) {
|
||||
Objects.requireNonNull(target, "target cannot be null");
|
||||
List<KodikResponse.Result> filteredResults = new ArrayList<>();
|
||||
|
||||
for (KodikResponse.Result result : body.results) {
|
||||
for (KodikResponse.Result result : target) {
|
||||
if (isAllowedType(result) && isUnique(result, seenIds)) {
|
||||
filteredResults.add(result);
|
||||
}
|
||||
}
|
||||
|
||||
body.results = filteredResults;
|
||||
return body;
|
||||
return filteredResults;
|
||||
}
|
||||
|
||||
private boolean isAllowedType(KodikResponse.Result result) {
|
||||
Reference in New Issue
Block a user