Public Access
fix(igdb): search only games a user can own and play
The search listed DLC and e-Reader levels, and the limit of 10 pushed the main games out. Keep main games, standalone expansions, seasons, remakes, remasters, expanded games and ports, and show 20 hits.
This commit is contained in:
1 parent
4d50863cb8
commit
e1d837bc78
2 files changed
+6
-3
No files matched your search
@@ -49,7 +49,10 @@ public class IgdbApiService {
|
|||||||
*/
|
*/
|
||||||
public record Game(long igdbId, String name, Integer year, String imageUrl, List<String> platforms, Long steamAppid) {}
|
public record Game(long igdbId, String name, Integer year, String imageUrl, List<String> platforms, Long steamAppid) {}
|
||||||
|
|
||||||
private static final int SEARCH_LIMIT = 10;
|
private static final int SEARCH_LIMIT = 20;
|
||||||
|
// IGDB game types a user can own and play on their own: main game, standalone expansion, season, remake,
|
||||||
|
// remaster, expanded game, port. Leaves out DLC, bundles, mods, episodes, packs and updates.
|
||||||
|
private static final String PLAYABLE_GAME_TYPES = "(0,4,7,8,9,10,11)";
|
||||||
private static final String GAME_FIELDS = "fields name,first_release_date,cover.image_id,artworks.image_id,"
|
private static final String GAME_FIELDS = "fields name,first_release_date,cover.image_id,artworks.image_id,"
|
||||||
+ "screenshots.image_id,platforms.name,platforms.abbreviation,external_games.external_game_source,"
|
+ "screenshots.image_id,platforms.name,platforms.abbreviation,external_games.external_game_source,"
|
||||||
+ "external_games.uid;";
|
+ "external_games.uid;";
|
||||||
@@ -118,7 +121,7 @@ public class IgdbApiService {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
IgdbResponses.Game[] games = query("/games", "search \"" + searchText(query) + "\"; " + GAME_FIELDS
|
IgdbResponses.Game[] games = query("/games", "search \"" + searchText(query) + "\"; " + GAME_FIELDS
|
||||||
+ " where version_parent = null; limit " + SEARCH_LIMIT + ";", IgdbResponses.Game[].class);
|
+ " where version_parent = null & game_type = " + PLAYABLE_GAME_TYPES + "; limit " + SEARCH_LIMIT + ";", IgdbResponses.Game[].class);
|
||||||
return Optional.of(Arrays.stream(games).map(IgdbApiService::toGame).flatMap(Optional::stream).toList());
|
return Optional.of(Arrays.stream(games).map(IgdbApiService::toGame).flatMap(Optional::stream).toList());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Error searching IGDB games", e);
|
log.error("Error searching IGDB games", e);
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ class IgdbApiServiceTest extends AbstractUnitTest {
|
|||||||
expectToken();
|
expectToken();
|
||||||
igdb.expect(requestTo(containsString("/games")))
|
igdb.expect(requestTo(containsString("/games")))
|
||||||
.andExpect(content().string(allOf(containsString("search \"zelda\";"), containsString("version_parent = null"),
|
.andExpect(content().string(allOf(containsString("search \"zelda\";"), containsString("version_parent = null"),
|
||||||
containsString("limit 10"))))
|
containsString("game_type = (0,4,7,8,9,10,11)"), containsString("limit 20"))))
|
||||||
.andRespond(withSuccess(ZELDA, MediaType.APPLICATION_JSON));
|
.andRespond(withSuccess(ZELDA, MediaType.APPLICATION_JSON));
|
||||||
|
|
||||||
List<IgdbApiService.Game> games = service.searchGames(" zelda ").orElseThrow();
|
List<IgdbApiService.Game> games = service.searchGames(" zelda ").orElseThrow();
|
||||||
|
|||||||
Reference in new issue
Block a user