diff --git a/ProjectLighthouse/Controllers/ListController.cs b/ProjectLighthouse/Controllers/ListController.cs index 765582a5..fffda451 100644 --- a/ProjectLighthouse/Controllers/ListController.cs +++ b/ProjectLighthouse/Controllers/ListController.cs @@ -1,4 +1,5 @@ #nullable enable +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -26,7 +27,7 @@ namespace LBPUnion.ProjectLighthouse.Controllers #region Level Queue (lolcatftw) [HttpGet("slots/lolcatftw/{username}")] - public async Task GetLevelQueue(string username) + public async Task GetLevelQueue(string username, [FromQuery] int pageSize, [FromQuery] int pageStart) { Token? token = await this.database.TokenFromRequest(this.Request); if (token == null) return this.BadRequest(); @@ -39,11 +40,13 @@ namespace LBPUnion.ProjectLighthouse.Controllers .Include(q => q.Slot.Creator) .Where(q => q.Slot.GameVersion <= gameVersion) .Where(q => q.User.Username == username) + .Skip(pageStart - 1) + .Take(Math.Min(pageSize, 30)) .AsEnumerable(); string response = queuedLevels.Aggregate(string.Empty, (current, q) => current + q.Slot.Serialize()); - return this.Ok(LbpSerializer.TaggedStringElement("slots", response, "total", 1)); + return this.Ok(LbpSerializer.TaggedStringElement("slots", response, "total", this.database.QueuedLevels.Include(q => q.User).Where(q => q.User.Username == username).Count())); } [HttpPost("lolcatftw/add/user/{id:int}")] @@ -88,7 +91,7 @@ namespace LBPUnion.ProjectLighthouse.Controllers #region Hearted Levels [HttpGet("favouriteSlots/{username}")] - public async Task GetFavouriteSlots(string username) + public async Task GetFavouriteSlots(string username, [FromQuery] int pageSize, [FromQuery] int pageStart) { Token? token = await this.database.TokenFromRequest(this.Request); if (token == null) return this.BadRequest(); @@ -101,11 +104,13 @@ namespace LBPUnion.ProjectLighthouse.Controllers .Include(q => q.Slot.Creator) .Where(q => q.Slot.GameVersion <= gameVersion) .Where(q => q.User.Username == username) + .Skip(pageStart - 1) + .Take(Math.Min(pageSize, 30)) .AsEnumerable(); string response = heartedLevels.Aggregate(string.Empty, (current, q) => current + q.Slot.Serialize()); - return this.Ok(LbpSerializer.TaggedStringElement("favouriteSlots", response, "total", 1)); + return this.Ok(LbpSerializer.TaggedStringElement("favouriteSlots", response, "total", this.database.HeartedLevels.Include(q => q.User).Where(q => q.User.Username == username).Count())); } [HttpPost("favourite/slot/user/{id:int}")] @@ -152,7 +157,7 @@ namespace LBPUnion.ProjectLighthouse.Controllers #region Users [HttpGet("favouriteUsers/{username}")] - public async Task GetFavouriteUsers(string username) + public async Task GetFavouriteUsers(string username, [FromQuery] int pageSize, [FromQuery] int pageStart) { Token? token = await this.database.TokenFromRequest(this.Request); if (token == null) return this.StatusCode(403, ""); @@ -162,11 +167,13 @@ namespace LBPUnion.ProjectLighthouse.Controllers .Include(q => q.HeartedUser) .Include(q => q.HeartedUser.Location) .Where(q => q.User.Username == username) + .Skip(pageStart - 1) + .Take(Math.Min(pageSize, 30)) .AsEnumerable(); string response = heartedProfiles.Aggregate(string.Empty, (current, q) => current + q.HeartedUser.Serialize(token.GameVersion)); - return this.Ok(LbpSerializer.TaggedStringElement("favouriteUsers", response, "total", 1)); + return this.Ok(LbpSerializer.TaggedStringElement("favouriteUsers", response, "total", this.database.HeartedProfiles.Include(q => q.User).Where(q => q.User.Username == username).Count())); } [HttpPost("favourite/user/{username}")] @@ -217,4 +224,4 @@ namespace LBPUnion.ProjectLighthouse.Controllers #endregion } -} \ No newline at end of file +}