From bb1cf0f4e23b2c5f5962b6ef85bcb3fbad78e6a8 Mon Sep 17 00:00:00 2001 From: jvyden Date: Mon, 18 Oct 2021 17:59:32 -0400 Subject: [PATCH] Add ability to heart levels --- ProjectLighthouse.sln.DotSettings | 1 + .../Controllers/LevelListController.cs | 56 +++++++++++++++++-- ProjectLighthouse/Database.cs | 1 + 3 files changed, 53 insertions(+), 5 deletions(-) diff --git a/ProjectLighthouse.sln.DotSettings b/ProjectLighthouse.sln.DotSettings index 7443a6e3..f6af5eef 100644 --- a/ProjectLighthouse.sln.DotSettings +++ b/ProjectLighthouse.sln.DotSettings @@ -11,5 +11,6 @@ True True True + True True True \ No newline at end of file diff --git a/ProjectLighthouse/Controllers/LevelListController.cs b/ProjectLighthouse/Controllers/LevelListController.cs index 59f21cc8..a393e6f1 100644 --- a/ProjectLighthouse/Controllers/LevelListController.cs +++ b/ProjectLighthouse/Controllers/LevelListController.cs @@ -12,12 +12,18 @@ namespace ProjectLighthouse.Controllers { [Route("LITTLEBIGPLANETPS3_XML/")] [Produces("text/xml")] public class LevelListController : ControllerBase { + private readonly Database database; + public LevelListController(Database database) { + this.database = database; + } + #region Level Queue (lolcatftw) [HttpGet("slots/lolcatftw/{username}")] public IActionResult GetLevelQueue(string username) { IEnumerable queuedLevels = new Database().QueuedLevels .Include(q => q.User) .Include(q => q.Slot) + .Include(q => q.Slot.Location) .Where(q => q.User.Username == username) .AsEnumerable(); @@ -28,8 +34,6 @@ namespace ProjectLighthouse.Controllers { [HttpPost("lolcatftw/remove/user/{id:int}")] public async Task RemoveQueuedLevel(int id) { - await using Database database = new(); - User? user = await database.UserFromRequest(this.Request); if(user == null) return this.StatusCode(403, ""); @@ -43,8 +47,6 @@ namespace ProjectLighthouse.Controllers { [HttpPost("lolcatftw/add/user/{id:int}")] public async Task AddQueuedLevel(int id) { - await using Database database = new(); - User? user = await database.UserFromRequest(this.Request); if(user == null) return this.StatusCode(403, ""); @@ -63,7 +65,51 @@ namespace ProjectLighthouse.Controllers { #endregion #region Hearted Levels - + + [HttpGet("favouriteSlots/{username}")] + public async Task GetFavouriteSlots(string username) { + IEnumerable heartedLevels = new Database().HeartedLevels + .Include(q => q.User) + .Include(q => q.Slot) + .Include(q => q.Slot.Location) + .Where(q => q.User.Username == username) + .AsEnumerable(); + + string response = heartedLevels.Aggregate(string.Empty, (current, q) => current + q.Slot.Serialize()); + + return this.Ok(LbpSerializer.TaggedStringElement("favouriteSlots", response, "total", 1)); + } + + [HttpPost("favourite/slot/user/{id:int}")] + public async Task AddFavourite(int id) { + User? user = await database.UserFromRequest(this.Request); + if(user == null) return this.StatusCode(403, ""); + + HeartedLevel heartedLevel = await database.HeartedLevels.FirstOrDefaultAsync(q => q.UserId == user.UserId && q.SlotId == id); + if(heartedLevel != null) return this.Ok(); + + database.HeartedLevels.Add(new HeartedLevel { + SlotId = id, + UserId = user.UserId, + }); + + await database.SaveChangesAsync(); + + return this.Ok(); + } + + [HttpPost("unfavourite/slot/user/{id:int}")] + public async Task RemoveFavourite(int id) { + User? user = await database.UserFromRequest(this.Request); + if(user == null) return this.StatusCode(403, ""); + + HeartedLevel heartedLevel = await database.HeartedLevels.FirstOrDefaultAsync(q => q.UserId == user.UserId && q.SlotId == id); + if(heartedLevel != null) database.HeartedLevels.Remove(heartedLevel); + + await database.SaveChangesAsync(); + + return this.Ok(); + } #endregion } } \ No newline at end of file diff --git a/ProjectLighthouse/Database.cs b/ProjectLighthouse/Database.cs index 2182c8ec..882f612f 100644 --- a/ProjectLighthouse/Database.cs +++ b/ProjectLighthouse/Database.cs @@ -10,6 +10,7 @@ namespace ProjectLighthouse { public DbSet Locations { get; set; } public DbSet Slots { get; set; } public DbSet QueuedLevels { get; set; } + public DbSet HeartedLevels { get; set; } public DbSet Comments { get; set; } public DbSet Tokens { get; set; }