From 010943e587a22de0617526f8d0ea8a657f6b26d4 Mon Sep 17 00:00:00 2001 From: droideparanoico Date: Thu, 2 Jul 2026 16:29:48 +0200 Subject: [PATCH] Fix MB API deserialization: primary-type and secondary-types are strings not objects --- .../dto/ReleaseGroupBrowseResponse.java | 21 +++++++------------ .../discdrop/service/ReleaseGroupService.java | 5 ++--- .../com/discdrop/web/ArtistController.java | 12 ++--------- 3 files changed, 12 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/discdrop/client/dto/ReleaseGroupBrowseResponse.java b/src/main/java/com/discdrop/client/dto/ReleaseGroupBrowseResponse.java index 1c9d74f..9a8b60e 100644 --- a/src/main/java/com/discdrop/client/dto/ReleaseGroupBrowseResponse.java +++ b/src/main/java/com/discdrop/client/dto/ReleaseGroupBrowseResponse.java @@ -1,30 +1,25 @@ package com.discdrop.client.dto; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.List; @JsonIgnoreProperties(ignoreUnknown = true) public record ReleaseGroupBrowseResponse( - List releaseGroups, - int releaseGroupCount + @JsonProperty("release-groups") List releaseGroups, + @JsonProperty("release-group-count") int releaseGroupCount ) { @JsonIgnoreProperties(ignoreUnknown = true) public record ReleaseGroup( String id, String title, - String firstReleaseDate, - PrimaryType primaryType, - List secondaryTypes, - List artistCredit + @JsonProperty("first-release-date") String firstReleaseDate, + @JsonProperty("primary-type") String primaryType, + @JsonProperty("secondary-types") List secondaryTypes, + @JsonProperty("artist-credit") List artistCredit ) { @JsonIgnoreProperties(ignoreUnknown = true) - public record PrimaryType(String id, String name) {} - - @JsonIgnoreProperties(ignoreUnknown = true) - public record SecondaryType(String id, String name) {} - - @JsonIgnoreProperties(ignoreUnknown = true) - public record ArtistCredit(Artist artist) { + public record ArtistCredit(@JsonProperty("artist") Artist artist) { @JsonIgnoreProperties(ignoreUnknown = true) public record Artist(String id, String name) {} } diff --git a/src/main/java/com/discdrop/service/ReleaseGroupService.java b/src/main/java/com/discdrop/service/ReleaseGroupService.java index f094d02..ac854e9 100644 --- a/src/main/java/com/discdrop/service/ReleaseGroupService.java +++ b/src/main/java/com/discdrop/service/ReleaseGroupService.java @@ -43,15 +43,14 @@ public class ReleaseGroupService { total = Math.min(page.releaseGroupCount(), MAX_RELEASE_GROUPS); for (var rg : page.releaseGroups()) { - String primaryType = rg.primaryType() != null ? rg.primaryType().name() : "Other"; + String primaryType = rg.primaryType() != null ? rg.primaryType() : "Other"; if (!monitoredTypes.contains(primaryType)) continue; String secondaryTypes = "[]"; if (rg.secondaryTypes() != null && !rg.secondaryTypes().isEmpty()) { try { - secondaryTypes = json.writeValueAsString( - rg.secondaryTypes().stream().map(s -> s.name()).toList()); + secondaryTypes = json.writeValueAsString(rg.secondaryTypes()); } catch (Exception e) { secondaryTypes = "[]"; } diff --git a/src/main/java/com/discdrop/web/ArtistController.java b/src/main/java/com/discdrop/web/ArtistController.java index 3f53403..d157ddc 100644 --- a/src/main/java/com/discdrop/web/ArtistController.java +++ b/src/main/java/com/discdrop/web/ArtistController.java @@ -9,7 +9,6 @@ import com.discdrop.service.ReleaseGroupService; import io.quarkus.qute.Location; import io.quarkus.qute.Template; import io.quarkus.qute.TemplateInstance; -import io.vertx.core.Vertx; import jakarta.inject.Inject; import jakarta.ws.rs.*; import jakarta.ws.rs.core.MediaType; @@ -29,9 +28,6 @@ public class ArtistController { @Inject FeedService feedService; - @Inject - Vertx vertx; - @Inject @Location("fragments/search-results") Template searchResultsTemplate; @@ -63,15 +59,11 @@ public class ArtistController { public Response trackArtist(@PathParam("mbid") String mbid) { var artist = artistService.addArtist(mbid); var types = getMonitoredTypes(artist); - vertx.executeBlocking(promise -> { - releaseGroupService.fetchAndCache(artist.mbid(), artist.name(), types); - promise.complete(); - }); + releaseGroupService.fetchAndCache(artist.mbid(), artist.name(), types); var allArtists = artistService.findAll(); var listHtml = artistListTemplate.data("artists", allArtists).render(); var emptySearch = searchResultsTemplate.data("artists", List.of()).render(); - var combined = emptySearch + listHtml; - return Response.ok(combined).build(); + return Response.ok(emptySearch + listHtml).build(); } @DELETE