diff --git a/DatabaseMigrations/7.sql b/DatabaseMigrations/7.sql new file mode 100644 index 00000000..ac8e1bc9 --- /dev/null +++ b/DatabaseMigrations/7.sql @@ -0,0 +1,17 @@ +create table QueuedLevels +( + QueuedLevelId int, + UserId int not null, + SlotId int not null +); + +create unique index QueuedLevels_QueuedLevelId_uindex + on QueuedLevels (QueuedLevelId); + +alter table QueuedLevels + add constraint QueuedLevels_pk + primary key (QueuedLevelId); + +alter table QueuedLevels + modify QueuedLevelId int auto_increment; + diff --git a/ProjectLighthouse/Controllers/LevelQueueController.cs b/ProjectLighthouse/Controllers/LevelQueueController.cs new file mode 100644 index 00000000..7fecf4f8 --- /dev/null +++ b/ProjectLighthouse/Controllers/LevelQueueController.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using ProjectLighthouse.Serialization; +using ProjectLighthouse.Types; + +namespace ProjectLighthouse.Controllers { + [ApiController] + [Route("LITTLEBIGPLANETPS3_XML/")] + [Produces("text/xml")] + public class LevelQueueController : ControllerBase { + [HttpGet("slots/lolcatftw/{username}")] + public IActionResult GetLevelQueue(string username) { + IEnumerable queuedLevels = new Database().QueuedLevels + .Include(q => q.User) + .Include(q => q.Slot) + .Where(q => q.User.Username == username) + .AsEnumerable(); + + string response = queuedLevels.Aggregate(string.Empty, (current, q) => current + q.Slot.Serialize()); + + return this.Ok(LbpSerializer.TaggedStringElement("slots", response, "total", 1)); + } + } +} \ No newline at end of file diff --git a/ProjectLighthouse/Database.cs b/ProjectLighthouse/Database.cs index dc33f549..af758fcd 100644 --- a/ProjectLighthouse/Database.cs +++ b/ProjectLighthouse/Database.cs @@ -1,4 +1,4 @@ -#nullable enable +//#nullable enable using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; @@ -11,6 +11,8 @@ namespace ProjectLighthouse { public DbSet Users { get; set; } public DbSet Locations { get; set; } public DbSet Slots { get; set; } + + public DbSet QueuedLevels { get; set; } public DbSet Comments { get; set; } public DbSet Tokens { get; set; } @@ -39,6 +41,7 @@ namespace ProjectLighthouse { } + #nullable enable public async Task AuthenticateUser(LoginData loginData) { // TODO: don't use psn name to authenticate User user = await this.Users.FirstOrDefaultAsync(u => u.Username == loginData.Username) @@ -70,5 +73,6 @@ namespace ProjectLighthouse { return await UserFromAuthToken(mmAuth); } + #nullable disable } } \ No newline at end of file diff --git a/ProjectLighthouse/Types/QueuedLevel.cs b/ProjectLighthouse/Types/QueuedLevel.cs new file mode 100644 index 00000000..03eabc15 --- /dev/null +++ b/ProjectLighthouse/Types/QueuedLevel.cs @@ -0,0 +1,19 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; + +namespace ProjectLighthouse.Types { + public class QueuedLevel { + [Key] public int QueuedLevelId { get; set; } + + public int UserId { get; set; } + + [ForeignKey(nameof(UserId))] + public User User { get; set; } + + public int SlotId { get; set; } + + [ForeignKey(nameof(SlotId))] + public Slot Slot { get; set; } + } +} \ No newline at end of file