namespace Bloxstrap.Models { public class UniverseDetails { private static List _cache { get; set; } = new(); public GameDetailResponse Data { get; set; } = null!; /// /// Returns data for a 128x128 icon /// public ThumbnailResponse Thumbnail { get; set; } = null!; public static UniverseDetails? LoadFromCache(long id) { var cacheQuery = _cache.Where(x => x.Data?.Id == id); if (cacheQuery.Any()) return cacheQuery.First(); return null; } public static Task FetchSingle(long id) => FetchBulk(id.ToString()); public static async Task FetchBulk(string ids) { var gameDetailResponse = await Http.GetJson>($"https://games.roblox.com/v1/games?universeIds={ids}"); if (gameDetailResponse is null || !gameDetailResponse.Data.Any()) return false; var universeThumbnailResponse = await Http.GetJson>($"https://thumbnails.roblox.com/v1/games/icons?universeIds={ids}&returnPolicy=PlaceHolder&size=128x128&format=Png&isCircular=false"); if (universeThumbnailResponse is null || !universeThumbnailResponse.Data.Any()) return false; foreach (string strId in ids.Split(',')) { long id = long.Parse(strId); _cache.Add(new UniverseDetails { Data = gameDetailResponse.Data.Where(x => x.Id == id).First(), Thumbnail = universeThumbnailResponse.Data.Where(x => x.TargetId == id).First(), }); } return true; } } }