From 4c5c3d81f8e149fc0585909ec011c4bc40da6e19 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 9 Mar 2018 12:28:43 -0500 Subject: [PATCH] item controller: add method for bulk price lookups --- .../http/service/item/ItemController.java | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/http-service/src/main/java/net/runelite/http/service/item/ItemController.java b/http-service/src/main/java/net/runelite/http/service/item/ItemController.java index f63407463f..0e02c8ce11 100644 --- a/http-service/src/main/java/net/runelite/http/service/item/ItemController.java +++ b/http-service/src/main/java/net/runelite/http/service/item/ItemController.java @@ -28,6 +28,8 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import java.time.Duration; import java.time.Instant; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -51,6 +53,7 @@ public class ItemController { private static final Duration CACHE_DUATION = Duration.ofMinutes(30); private static final String RUNELITE_CACHE = "RuneLite-Cache"; + private static final int MAX_BATCH_LOOKUP = 1024; private final Cache cachedEmpty = CacheBuilder.newBuilder() .maximumSize(1024L) @@ -197,7 +200,7 @@ public class ItemController } @RequestMapping("/search") - public SearchResult search(HttpServletResponse response, @RequestParam String query) + public SearchResult search(@RequestParam String query) { List result = itemService.search(query); @@ -209,4 +212,33 @@ public class ItemController .collect(Collectors.toList())); return searchResult; } + + @RequestMapping("/price") + public ItemPrice[] prices(@RequestParam("id") int[] itemIds) + { + if (itemIds.length > MAX_BATCH_LOOKUP) + { + itemIds = Arrays.copyOf(itemIds, MAX_BATCH_LOOKUP); + } + + List itemPrices = new ArrayList<>(itemIds.length); + for (int itemId : itemIds) + { + ItemEntry item = itemService.getItem(itemId); + PriceEntry priceEntry = itemService.getPrice(itemId, null); + + if (item == null || priceEntry == null) + { + continue; + } + + ItemPrice itemPrice = new ItemPrice(); + itemPrice.setItem(item.toItem()); + itemPrice.setPrice(priceEntry.getPrice()); + itemPrice.setTime(priceEntry.getTime()); + itemPrices.add(itemPrice); + } + + return itemPrices.toArray(new ItemPrice[itemPrices.size()]); + } }