From 1bea8f9017d396203566330040712fdf0def32b4 Mon Sep 17 00:00:00 2001 From: LumaLivy <7350336+LumaLivy@users.noreply.github.com> Date: Sat, 20 Nov 2021 04:23:42 -0500 Subject: [PATCH 1/3] Add most of the remaining community slot categories --- .../Controllers/SlotsController.cs | 139 +++++++++++++++++- 1 file changed, 138 insertions(+), 1 deletion(-) diff --git a/ProjectLighthouse/Controllers/SlotsController.cs b/ProjectLighthouse/Controllers/SlotsController.cs index 2ded22b4..a8be7e87 100644 --- a/ProjectLighthouse/Controllers/SlotsController.cs +++ b/ProjectLighthouse/Controllers/SlotsController.cs @@ -92,7 +92,13 @@ namespace LBPUnion.ProjectLighthouse.Controllers [HttpGet("slots/lbp2cool")] [HttpGet("slots/cool")] - public async Task CoolSlots([FromQuery] int page) => await LuckyDipSlots(30 * page, 30, 69); + public async Task CoolSlots([FromQuery] int pageStart, [FromQuery] int pageSize, [FromQuery] string gameFilterType, [FromQuery] int players, [FromQuery] Boolean move, [FromQuery] int? page = null) + { + int _pageStart = pageStart; + if (page != null) _pageStart = (int)page * 30; + // bit of a better placeholder until we can track average user interaction with /stream endpoint + return await ThumbsSlots(_pageStart, Math.Min(pageSize, 30), gameFilterType, players, move, "thisWeek"); + } [HttpGet("slots")] public async Task NewestSlots([FromQuery] int pageStart, [FromQuery] int pageSize) @@ -152,5 +158,136 @@ namespace LBPUnion.ProjectLighthouse.Controllers return this.Ok(LbpSerializer.TaggedStringElement("slots", response, "hint_start", pageStart + Math.Min(pageSize, 30))); } + [HttpGet("slots/thumbs")] + public async Task ThumbsSlots([FromQuery] int pageStart, [FromQuery] int pageSize, [FromQuery] string gameFilterType, [FromQuery] int players, [FromQuery] Boolean move, [FromQuery] string? dateFilterType = null) + { + // v--- not sure of API in LBP3 here, needs testing + GameVersion gameVersion = gameFilterType == "both" ? GameVersion.LittleBigPlanet2 : GameVersion.LittleBigPlanet1; + + long oldestTime; + + string _dateFilterType = dateFilterType != null ? dateFilterType : ""; + + switch (_dateFilterType) + { + case "thisWeek": + oldestTime = DateTimeOffset.Now.AddDays(-7).ToUnixTimeMilliseconds(); + break; + case "thisMonth": + oldestTime = DateTimeOffset.Now.AddDays(-31).ToUnixTimeMilliseconds(); + break; + default: + oldestTime = 0; + break; + } + + Random rand = new(); + + IEnumerable slots = this.database.Slots.Where(s => s.GameVersion <= gameVersion && s.FirstUploaded >= oldestTime) + .Include(s => s.Creator) + .Include(s => s.Location) + .AsEnumerable() + .OrderByDescending(s => s.Thumbsup) + .ThenBy(_ => rand.Next()) + .Skip(pageStart - 1) + .Take(Math.Min(pageSize, 30)); + + string response = slots.Aggregate(string.Empty, (current, slot) => current + slot.Serialize()); + + return this.Ok(LbpSerializer.TaggedStringElement("slots", response, "hint_start", pageStart + Math.Min(pageSize, 30))); + } + + [HttpGet("slots/mostUniquePlays")] + public async Task MostUniquePlaysSlots([FromQuery] int pageStart, [FromQuery] int pageSize, [FromQuery] string gameFilterType, [FromQuery] int players, [FromQuery] Boolean move, [FromQuery] string? dateFilterType = null) + { + // v--- not sure of API in LBP3 here, needs testing + GameVersion gameVersion = gameFilterType == "both" ? GameVersion.LittleBigPlanet2 : GameVersion.LittleBigPlanet1; + + long oldestTime; + + string _dateFilterType = dateFilterType != null ? dateFilterType : ""; + + switch (_dateFilterType) + { + case "thisWeek": + oldestTime = DateTimeOffset.Now.AddDays(-7).ToUnixTimeMilliseconds(); + break; + case "thisMonth": + oldestTime = DateTimeOffset.Now.AddDays(-31).ToUnixTimeMilliseconds(); + break; + default: + oldestTime = 0; + break; + } + + Random rand = new(); + + IEnumerable slots = this.database.Slots.Where(s => s.GameVersion <= gameVersion && s.FirstUploaded >= oldestTime) + .Include(s => s.Creator) + .Include(s => s.Location) + .AsEnumerable() + .OrderByDescending(s => { + // probably not the best way to do this + switch (gameVersion) { + case GameVersion.LittleBigPlanet1: + return s.PlaysLBP1Unique; + case GameVersion.LittleBigPlanet2: + return s.PlaysLBP2Unique; + case GameVersion.LittleBigPlanet3: + return s.PlaysLBP3Unique; + case GameVersion.LittleBigPlanetVita: + return s.PlaysLBPVitaUnique; + default: + return s.PlaysUnique; + } + }) + .ThenBy(_ => rand.Next()) + .Skip(pageStart - 1) + .Take(Math.Min(pageSize, 30)); + + string response = slots.Aggregate(string.Empty, (current, slot) => current + slot.Serialize()); + + return this.Ok(LbpSerializer.TaggedStringElement("slots", response, "hint_start", pageStart + Math.Min(pageSize, 30))); + } + + [HttpGet("slots/mostHearted")] + public async Task MostHeartedSlots([FromQuery] int pageStart, [FromQuery] int pageSize, [FromQuery] string gameFilterType, [FromQuery] int players, [FromQuery] Boolean move, [FromQuery] string? dateFilterType = null) + { + // v--- not sure of API in LBP3 here, needs testing + GameVersion gameVersion = gameFilterType == "both" ? GameVersion.LittleBigPlanet2 : GameVersion.LittleBigPlanet1; + + long oldestTime; + + string _dateFilterType = dateFilterType != null ? dateFilterType : ""; + + switch (_dateFilterType) + { + case "thisWeek": + oldestTime = DateTimeOffset.Now.AddDays(-7).ToUnixTimeMilliseconds(); + break; + case "thisMonth": + oldestTime = DateTimeOffset.Now.AddDays(-31).ToUnixTimeMilliseconds(); + break; + default: + oldestTime = 0; + break; + } + + Random rand = new(); + + IEnumerable slots = this.database.Slots.Where(s => s.GameVersion <= gameVersion && s.FirstUploaded >= oldestTime) + .Include(s => s.Creator) + .Include(s => s.Location) + .AsEnumerable() + .OrderByDescending(s => s.Hearts) + .ThenBy(_ => rand.Next()) + .Skip(pageStart - 1) + .Take(Math.Min(pageSize, 30)); + + string response = slots.Aggregate(string.Empty, (current, slot) => current + slot.Serialize()); + + return this.Ok(LbpSerializer.TaggedStringElement("slots", response, "hint_start", pageStart + Math.Min(pageSize, 30))); + } + } } \ No newline at end of file From 62aafc91083d7c8f49f8a411998978f454bf6d86 Mon Sep 17 00:00:00 2001 From: LumaLivy <7350336+LumaLivy@users.noreply.github.com> Date: Tue, 14 Dec 2021 14:12:49 -0500 Subject: [PATCH 2/3] Use better gameVersion checking when filtering --- .../Controllers/SlotsController.cs | 120 ++++++++++++++++-- 1 file changed, 108 insertions(+), 12 deletions(-) diff --git a/ProjectLighthouse/Controllers/SlotsController.cs b/ProjectLighthouse/Controllers/SlotsController.cs index 6e104235..55923f40 100644 --- a/ProjectLighthouse/Controllers/SlotsController.cs +++ b/ProjectLighthouse/Controllers/SlotsController.cs @@ -208,8 +208,7 @@ namespace LBPUnion.ProjectLighthouse.Controllers [HttpGet("slots/thumbs")] public async Task ThumbsSlots([FromQuery] int pageStart, [FromQuery] int pageSize, [FromQuery] string gameFilterType, [FromQuery] int players, [FromQuery] Boolean move, [FromQuery] string? dateFilterType = null) { - // v--- not sure of API in LBP3 here, needs testing - GameVersion gameVersion = gameFilterType == "both" ? GameVersion.LittleBigPlanet2 : GameVersion.LittleBigPlanet1; + long oldestTime; @@ -228,9 +227,42 @@ namespace LBPUnion.ProjectLighthouse.Controllers break; } - Random rand = new(); + Random rand = new(); GameVersion gameVersion; - IEnumerable slots = this.database.Slots.Where(s => s.GameVersion <= gameVersion && s.FirstUploaded >= oldestTime) + switch (gameFilterType) + { + case "lbp1": + gameVersion = GameVersion.LittleBigPlanet1; + break; + case "lbp2": + gameVersion = GameVersion.LittleBigPlanet2; + break; + case "lbp3": + gameVersion = GameVersion.LittleBigPlanet3; + break; + case "both": // LBP2 default option + gameVersion = GameVersion.LittleBigPlanet2; + break; + default: + gameVersion = GameVersion.Unknown; + break; + } + + IQueryable whereSlots; + + if (gameFilterType == "both") + { + // Get game versions less than the current version + // Needs support for LBP3 ("both" = LBP1+2) + whereSlots = this.database.Slots.Where(s => s.GameVersion <= gameVersion && s.FirstUploaded >= oldestTime); + } + else + { + // Get game versions exactly equal to gamefiltertype + whereSlots = this.database.Slots.Where(s => s.GameVersion == gameVersion && s.FirstUploaded >= oldestTime); + } + + IEnumerable slots = whereSlots .Include(s => s.Creator) .Include(s => s.Location) .AsEnumerable() @@ -247,8 +279,6 @@ namespace LBPUnion.ProjectLighthouse.Controllers [HttpGet("slots/mostUniquePlays")] public async Task MostUniquePlaysSlots([FromQuery] int pageStart, [FromQuery] int pageSize, [FromQuery] string gameFilterType, [FromQuery] int players, [FromQuery] Boolean move, [FromQuery] string? dateFilterType = null) { - // v--- not sure of API in LBP3 here, needs testing - GameVersion gameVersion = gameFilterType == "both" ? GameVersion.LittleBigPlanet2 : GameVersion.LittleBigPlanet1; long oldestTime; @@ -269,13 +299,48 @@ namespace LBPUnion.ProjectLighthouse.Controllers Random rand = new(); - IEnumerable slots = this.database.Slots.Where(s => s.GameVersion <= gameVersion && s.FirstUploaded >= oldestTime) + GameVersion gameVersion; + + switch (gameFilterType) + { + case "lbp1": + gameVersion = GameVersion.LittleBigPlanet1; + break; + case "lbp2": + gameVersion = GameVersion.LittleBigPlanet2; + break; + case "lbp3": + gameVersion = GameVersion.LittleBigPlanet3; + break; + case "both": // LBP2 default option + gameVersion = GameVersion.LittleBigPlanet2; + break; + default: + gameVersion = GameVersion.Unknown; + break; + } + + IQueryable whereSlots; + + if (gameFilterType == "both") + { + // Get game versions less than the current version + // Needs support for LBP3 ("both" = LBP1+2) + whereSlots = this.database.Slots.Where(s => s.GameVersion <= gameVersion && s.FirstUploaded >= oldestTime); + } + else + { + // Get game versions exactly equal to gamefiltertype + whereSlots = this.database.Slots.Where(s => s.GameVersion == gameVersion && s.FirstUploaded >= oldestTime); + } + + IEnumerable slots = whereSlots .Include(s => s.Creator) .Include(s => s.Location) .AsEnumerable() .OrderByDescending(s => { - // probably not the best way to do this + // probably not the best way to do this? switch (gameVersion) { case GameVersion.LittleBigPlanet1: @@ -302,8 +367,6 @@ namespace LBPUnion.ProjectLighthouse.Controllers [HttpGet("slots/mostHearted")] public async Task MostHeartedSlots([FromQuery] int pageStart, [FromQuery] int pageSize, [FromQuery] string gameFilterType, [FromQuery] int players, [FromQuery] Boolean move, [FromQuery] string? dateFilterType = null) { - // v--- not sure of API in LBP3 here, needs testing - GameVersion gameVersion = gameFilterType == "both" ? GameVersion.LittleBigPlanet2 : GameVersion.LittleBigPlanet1; long oldestTime; @@ -322,9 +385,42 @@ namespace LBPUnion.ProjectLighthouse.Controllers break; } - Random rand = new(); + Random rand = new(); GameVersion gameVersion; - IEnumerable slots = this.database.Slots.Where(s => s.GameVersion <= gameVersion && s.FirstUploaded >= oldestTime) + switch (gameFilterType) + { + case "lbp1": + gameVersion = GameVersion.LittleBigPlanet1; + break; + case "lbp2": + gameVersion = GameVersion.LittleBigPlanet2; + break; + case "lbp3": + gameVersion = GameVersion.LittleBigPlanet3; + break; + case "both": // LBP2 default option + gameVersion = GameVersion.LittleBigPlanet2; + break; + default: + gameVersion = GameVersion.Unknown; + break; + } + + IQueryable whereSlots; + + if (gameFilterType == "both") + { + // Get game versions less than the current version + // Needs support for LBP3 ("both" = LBP1+2) + whereSlots = this.database.Slots.Where(s => s.GameVersion <= gameVersion && s.FirstUploaded >= oldestTime); + } + else + { + // Get game versions exactly equal to gamefiltertype + whereSlots = this.database.Slots.Where(s => s.GameVersion == gameVersion && s.FirstUploaded >= oldestTime); + } + + IEnumerable slots = whereSlots .Include(s => s.Creator) .Include(s => s.Location) .AsEnumerable() From ace4ef8f5b48e4b7d4e88ccc1442c4b51b4fec34 Mon Sep 17 00:00:00 2001 From: jvyden Date: Sun, 9 Jan 2022 00:48:06 -0500 Subject: [PATCH 3/3] Remove most duplicated code --- .../Controllers/SlotsController.cs | 282 ++++++------------ 1 file changed, 96 insertions(+), 186 deletions(-) diff --git a/ProjectLighthouse/Controllers/SlotsController.cs b/ProjectLighthouse/Controllers/SlotsController.cs index 55923f40..ba047e86 100644 --- a/ProjectLighthouse/Controllers/SlotsController.cs +++ b/ProjectLighthouse/Controllers/SlotsController.cs @@ -91,7 +91,15 @@ namespace LBPUnion.ProjectLighthouse.Controllers [HttpGet("slots/lbp2cool")] [HttpGet("slots/cool")] - public async Task CoolSlots([FromQuery] int pageStart, [FromQuery] int pageSize, [FromQuery] string gameFilterType, [FromQuery] int players, [FromQuery] Boolean move, [FromQuery] int? page = null) + public async Task CoolSlots + ( + [FromQuery] int pageStart, + [FromQuery] int pageSize, + [FromQuery] string gameFilterType, + [FromQuery] int players, + [FromQuery] Boolean move, + [FromQuery] int? page = null + ) { int _pageStart = pageStart; if (page != null) _pageStart = (int)page * 30; @@ -206,65 +214,19 @@ namespace LBPUnion.ProjectLighthouse.Controllers } [HttpGet("slots/thumbs")] - public async Task ThumbsSlots([FromQuery] int pageStart, [FromQuery] int pageSize, [FromQuery] string gameFilterType, [FromQuery] int players, [FromQuery] Boolean move, [FromQuery] string? dateFilterType = null) + public async Task ThumbsSlots + ( + [FromQuery] int pageStart, + [FromQuery] int pageSize, + [FromQuery] string gameFilterType, + [FromQuery] int players, + [FromQuery] Boolean move, + [FromQuery] string? dateFilterType = null + ) { + Random rand = new(); - - long oldestTime; - - string _dateFilterType = dateFilterType != null ? dateFilterType : ""; - - switch (_dateFilterType) - { - case "thisWeek": - oldestTime = DateTimeOffset.Now.AddDays(-7).ToUnixTimeMilliseconds(); - break; - case "thisMonth": - oldestTime = DateTimeOffset.Now.AddDays(-31).ToUnixTimeMilliseconds(); - break; - default: - oldestTime = 0; - break; - } - - Random rand = new(); GameVersion gameVersion; - - switch (gameFilterType) - { - case "lbp1": - gameVersion = GameVersion.LittleBigPlanet1; - break; - case "lbp2": - gameVersion = GameVersion.LittleBigPlanet2; - break; - case "lbp3": - gameVersion = GameVersion.LittleBigPlanet3; - break; - case "both": // LBP2 default option - gameVersion = GameVersion.LittleBigPlanet2; - break; - default: - gameVersion = GameVersion.Unknown; - break; - } - - IQueryable whereSlots; - - if (gameFilterType == "both") - { - // Get game versions less than the current version - // Needs support for LBP3 ("both" = LBP1+2) - whereSlots = this.database.Slots.Where(s => s.GameVersion <= gameVersion && s.FirstUploaded >= oldestTime); - } - else - { - // Get game versions exactly equal to gamefiltertype - whereSlots = this.database.Slots.Where(s => s.GameVersion == gameVersion && s.FirstUploaded >= oldestTime); - } - - IEnumerable slots = whereSlots - .Include(s => s.Creator) - .Include(s => s.Location) + IEnumerable slots = FilterByRequest(gameFilterType, dateFilterType) .AsEnumerable() .OrderByDescending(s => s.Thumbsup) .ThenBy(_ => rand.Next()) @@ -277,84 +239,35 @@ namespace LBPUnion.ProjectLighthouse.Controllers } [HttpGet("slots/mostUniquePlays")] - public async Task MostUniquePlaysSlots([FromQuery] int pageStart, [FromQuery] int pageSize, [FromQuery] string gameFilterType, [FromQuery] int players, [FromQuery] Boolean move, [FromQuery] string? dateFilterType = null) + public async Task MostUniquePlaysSlots + ( + [FromQuery] int pageStart, + [FromQuery] int pageSize, + [FromQuery] string gameFilterType, + [FromQuery] int players, + [FromQuery] Boolean move, + [FromQuery] string? dateFilterType = null + ) { - - long oldestTime; - - string _dateFilterType = dateFilterType != null ? dateFilterType : ""; - - switch (_dateFilterType) - { - case "thisWeek": - oldestTime = DateTimeOffset.Now.AddDays(-7).ToUnixTimeMilliseconds(); - break; - case "thisMonth": - oldestTime = DateTimeOffset.Now.AddDays(-31).ToUnixTimeMilliseconds(); - break; - default: - oldestTime = 0; - break; - } - Random rand = new(); - GameVersion gameVersion; - - switch (gameFilterType) - { - case "lbp1": - gameVersion = GameVersion.LittleBigPlanet1; - break; - case "lbp2": - gameVersion = GameVersion.LittleBigPlanet2; - break; - case "lbp3": - gameVersion = GameVersion.LittleBigPlanet3; - break; - case "both": // LBP2 default option - gameVersion = GameVersion.LittleBigPlanet2; - break; - default: - gameVersion = GameVersion.Unknown; - break; - } - - IQueryable whereSlots; - - if (gameFilterType == "both") - { - // Get game versions less than the current version - // Needs support for LBP3 ("both" = LBP1+2) - whereSlots = this.database.Slots.Where(s => s.GameVersion <= gameVersion && s.FirstUploaded >= oldestTime); - } - else - { - // Get game versions exactly equal to gamefiltertype - whereSlots = this.database.Slots.Where(s => s.GameVersion == gameVersion && s.FirstUploaded >= oldestTime); - } - - IEnumerable slots = whereSlots - .Include(s => s.Creator) - .Include(s => s.Location) + IEnumerable slots = FilterByRequest(gameFilterType, dateFilterType) .AsEnumerable() - .OrderByDescending(s => - { - // probably not the best way to do this? - switch (gameVersion) + .OrderByDescending + ( + s => { - case GameVersion.LittleBigPlanet1: - return s.PlaysLBP1Unique; - case GameVersion.LittleBigPlanet2: - return s.PlaysLBP2Unique; - case GameVersion.LittleBigPlanet3: - return s.PlaysLBP3Unique; - case GameVersion.LittleBigPlanetVita: - return s.PlaysLBPVitaUnique; - default: - return s.PlaysUnique; + // probably not the best way to do this? + return GetGameFilter(gameFilterType) switch + { + GameVersion.LittleBigPlanet1 => s.PlaysLBP1Unique, + GameVersion.LittleBigPlanet2 => s.PlaysLBP2Unique, + GameVersion.LittleBigPlanet3 => s.PlaysLBP3Unique, + GameVersion.LittleBigPlanetVita => s.PlaysLBPVitaUnique, + _ => s.PlaysUnique, + }; } - }) + ) .ThenBy(_ => rand.Next()) .Skip(pageStart - 1) .Take(Math.Min(pageSize, 30)); @@ -365,64 +278,19 @@ namespace LBPUnion.ProjectLighthouse.Controllers } [HttpGet("slots/mostHearted")] - public async Task MostHeartedSlots([FromQuery] int pageStart, [FromQuery] int pageSize, [FromQuery] string gameFilterType, [FromQuery] int players, [FromQuery] Boolean move, [FromQuery] string? dateFilterType = null) + public async Task MostHeartedSlots + ( + [FromQuery] int pageStart, + [FromQuery] int pageSize, + [FromQuery] string gameFilterType, + [FromQuery] int players, + [FromQuery] Boolean move, + [FromQuery] string? dateFilterType = null + ) { + Random rand = new(); - long oldestTime; - - string _dateFilterType = dateFilterType != null ? dateFilterType : ""; - - switch (_dateFilterType) - { - case "thisWeek": - oldestTime = DateTimeOffset.Now.AddDays(-7).ToUnixTimeMilliseconds(); - break; - case "thisMonth": - oldestTime = DateTimeOffset.Now.AddDays(-31).ToUnixTimeMilliseconds(); - break; - default: - oldestTime = 0; - break; - } - - Random rand = new(); GameVersion gameVersion; - - switch (gameFilterType) - { - case "lbp1": - gameVersion = GameVersion.LittleBigPlanet1; - break; - case "lbp2": - gameVersion = GameVersion.LittleBigPlanet2; - break; - case "lbp3": - gameVersion = GameVersion.LittleBigPlanet3; - break; - case "both": // LBP2 default option - gameVersion = GameVersion.LittleBigPlanet2; - break; - default: - gameVersion = GameVersion.Unknown; - break; - } - - IQueryable whereSlots; - - if (gameFilterType == "both") - { - // Get game versions less than the current version - // Needs support for LBP3 ("both" = LBP1+2) - whereSlots = this.database.Slots.Where(s => s.GameVersion <= gameVersion && s.FirstUploaded >= oldestTime); - } - else - { - // Get game versions exactly equal to gamefiltertype - whereSlots = this.database.Slots.Where(s => s.GameVersion == gameVersion && s.FirstUploaded >= oldestTime); - } - - IEnumerable slots = whereSlots - .Include(s => s.Creator) - .Include(s => s.Location) + IEnumerable slots = FilterByRequest(gameFilterType, dateFilterType) .AsEnumerable() .OrderByDescending(s => s.Hearts) .ThenBy(_ => rand.Next()) @@ -434,5 +302,47 @@ namespace LBPUnion.ProjectLighthouse.Controllers return this.Ok(LbpSerializer.TaggedStringElement("slots", response, "hint_start", pageStart + Math.Min(pageSize, 30))); } + public GameVersion GetGameFilter(string gameFilterType) + { + return gameFilterType switch + { + "lbp1" => GameVersion.LittleBigPlanet1, + "lbp2" => GameVersion.LittleBigPlanet2, + "lbp3" => GameVersion.LittleBigPlanet3, + "both" => GameVersion.LittleBigPlanet2, // LBP2 default option + _ => GameVersion.Unknown, + }; + } + + public IQueryable FilterByRequest(string gameFilterType, string? dateFilterType) + { + string _dateFilterType = dateFilterType ?? ""; + + long oldestTime = _dateFilterType switch + { + "thisWeek" => DateTimeOffset.Now.AddDays(-7).ToUnixTimeMilliseconds(), + "thisMonth" => DateTimeOffset.Now.AddDays(-31).ToUnixTimeMilliseconds(), + _ => 0, + }; + + GameVersion gameVersion = GetGameFilter(gameFilterType); + + IQueryable whereSlots; + + // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression + if (gameFilterType == "both") + { + // Get game versions less than the current version + // Needs support for LBP3 ("both" = LBP1+2) + whereSlots = this.database.Slots.Where(s => s.GameVersion <= gameVersion && s.FirstUploaded >= oldestTime); + } + else + { + // Get game versions exactly equal to gamefiltertype + whereSlots = this.database.Slots.Where(s => s.GameVersion == gameVersion && s.FirstUploaded >= oldestTime); + } + + return whereSlots.Include(s => s.Creator).Include(s => s.Location); + } } } \ No newline at end of file