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; }