From bf08d0f4b746750da719d69711151a1b508a74c0 Mon Sep 17 00:00:00 2001 From: bivashy Date: Sun, 15 Feb 2026 02:48:02 +0500 Subject: [PATCH] Add kodik, imdb, shikimori, kinopoisk --- .../metadata/kodik/service/api/KodikAPI.java | 31 ++++++++ .../service/resource/SearchResource.java | 72 +++++++++++++++++++ 2 files changed, 103 insertions(+) diff --git a/src/main/java/com/backend/metadata/kodik/service/api/KodikAPI.java b/src/main/java/com/backend/metadata/kodik/service/api/KodikAPI.java index 39096c9..c1b31d3 100644 --- a/src/main/java/com/backend/metadata/kodik/service/api/KodikAPI.java +++ b/src/main/java/com/backend/metadata/kodik/service/api/KodikAPI.java @@ -18,4 +18,35 @@ public interface KodikAPI { @Field("limit") int limit, @Field("with_material_data") int withMaterialData); + @FormUrlEncoded + @POST("search") + Call findByKodikID( + @Field("token") String token, + @Field("id") String id, + @Field("limit") int limit, + @Field("with_material_data") int withMaterialData); + + @FormUrlEncoded + @POST("search") + Call findByShikimoriID( + @Field("token") String token, + @Field("shikimori_id") String shikimoriId, + @Field("limit") int limit, + @Field("with_material_data") int withMaterialData); + + @FormUrlEncoded + @POST("search") + Call findByKinopoiskID( + @Field("token") String token, + @Field("kinopoisk_id") String kinopoiskId, + @Field("limit") int limit, + @Field("with_material_data") int withMaterialData); + + @FormUrlEncoded + @POST("search") + Call findByImdbID( + @Field("token") String token, + @Field("imdb_id") String imdbId, + @Field("limit") int limit, + @Field("with_material_data") int withMaterialData); } diff --git a/src/main/java/com/backend/metadata/kodik/service/resource/SearchResource.java b/src/main/java/com/backend/metadata/kodik/service/resource/SearchResource.java index ebaeca8..b4fe865 100644 --- a/src/main/java/com/backend/metadata/kodik/service/resource/SearchResource.java +++ b/src/main/java/com/backend/metadata/kodik/service/resource/SearchResource.java @@ -15,6 +15,7 @@ import io.quarkiverse.retrofit.runtime.EnableRetrofit; import jakarta.ws.rs.BadRequestException; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; import jakarta.ws.rs.QueryParam; import retrofit2.Response; @@ -51,4 +52,75 @@ public class SearchResource { } } + @GET + @Path("/id/{id}") + public KodikResponse findByKodikId(@PathParam("id") String id) throws ServiceUnavailableException { + try { + Response response = kodikAPI.findByKodikID(tokenProvider.getKodikToken(), id, 1, 1) + .execute(); + if (!response.isSuccessful()) { + LOG.errorv("failed find by kodik id {0}, response code {1}, message {2}", id, + response.code(), response.message()); + throw new BadRequestException("bad response, code: " + response.code()); + } + return searchFilterService.filter(response.body()); + } catch (IOException e) { + LOG.warn("i/o error", e); + throw new ServiceUnavailableException("i/o error"); + } + } + + @GET + @Path("/shikimori/{id}") + public KodikResponse findByShikimoriId(@PathParam("id") String id) throws ServiceUnavailableException { + try { + Response response = kodikAPI.findByShikimoriID(tokenProvider.getKodikToken(), id, 1, 1) + .execute(); + if (!response.isSuccessful()) { + LOG.errorv("failed find by shikimori id {0}, response code {1}, message {2}", id, + response.code(), response.message()); + throw new BadRequestException("bad response, code: " + response.code()); + } + return searchFilterService.filter(response.body()); + } catch (IOException e) { + LOG.warn("i/o error", e); + throw new ServiceUnavailableException("i/o error"); + } + } + + @GET + @Path("/kinopoisk/{id}") + public KodikResponse findByKinopoiskId(@PathParam("id") String id) throws ServiceUnavailableException { + try { + Response response = kodikAPI.findByKinopoiskID(tokenProvider.getKodikToken(), id, 1, 1) + .execute(); + if (!response.isSuccessful()) { + LOG.errorv("failed find by kinopoisk id {0}, response code {1}, message {2}", id, + response.code(), response.message()); + throw new BadRequestException("bad response, code: " + response.code()); + } + return searchFilterService.filter(response.body()); + } catch (IOException e) { + LOG.warn("i/o error", e); + throw new ServiceUnavailableException("i/o error"); + } + } + + @GET + @Path("/imdb/{id}") + public KodikResponse findByImdbId(@PathParam("id") String id) throws ServiceUnavailableException { + try { + Response response = kodikAPI.findByImdbID(tokenProvider.getKodikToken(), id, 1, 1).execute(); + if (!response.isSuccessful()) { + LOG.errorv("failed find by imdb id {0}, response code {1}, message {2}", id, + response.code(), response.message()); + throw new BadRequestException("bad response, code: " + response.code()); + } + return searchFilterService.filter(response.body()); + } catch (IOException e) { + LOG.warn("i/o error", e); + throw new ServiceUnavailableException("i/o error"); + } + } + }