From d796f5c4ce93bbe92cdc060a4eb8f55631727c1e Mon Sep 17 00:00:00 2001 From: Alan Moon Date: Mon, 23 Oct 2023 17:01:57 -0700 Subject: [PATCH] Implement Get/SetScene and Houses - Attempt Implementation Of ``GetScene`` and ``SetScene`` - Typo In Route - Implement Houses --- src/Controllers/Common/ContentController.cs | 92 ++++++++++++++++++++- src/Model/DBContext.cs | 15 ++++ src/Model/HouseData.cs | 13 +++ src/Model/SceneData.cs | 14 ++++ src/Model/Viking.cs | 2 + 5 files changed, 132 insertions(+), 4 deletions(-) create mode 100644 src/Model/HouseData.cs create mode 100644 src/Model/SceneData.cs diff --git a/src/Controllers/Common/ContentController.cs b/src/Controllers/Common/ContentController.cs index fc61ba4..5ce28e8 100644 --- a/src/Controllers/Common/ContentController.cs +++ b/src/Controllers/Common/ContentController.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using Microsoft.EntityFrameworkCore; +using Org.BouncyCastle.Security.Certificates; using sodoff.Attributes; using sodoff.Model; using sodoff.Schema; @@ -1621,9 +1622,92 @@ public class ContentController : Controller { [HttpPost] //[Produces("application/xml")] [Route("ContentWebService.asmx/GetScene")] // used by World Of Jumpstart - public IActionResult GetScene() { - // TODO: This is a placeholder - return Ok(""); + [VikingSession] + public IActionResult GetScene(Viking viking, [FromForm] string sceneName) { + SceneData? scene = viking.SceneData.FirstOrDefault(e => e.SceneName == sceneName); + + if (scene is not null) return Ok(scene.XmlData); + else return Ok(""); + } + + [HttpPost] + [Route("ContentWebSerivce.asmx/GetHouse")] // used by World Of Jumpstart + [VikingSession] + public IActionResult GetHouse(Viking viking) { + if (viking.House is not null) return Ok(viking.House.XmlData); + else return Ok(""); + } + + [HttpPost] + [Route("ContentWebService.asmx/GetHouseByUserId")] // used by World Of Jumpstart + public IActionResult GetHouseByUserId([FromForm] Guid userId) + { + Viking? viking = ctx.Vikings.FirstOrDefault(e => e.Uid == userId); + + if (viking is not null) + { + if (viking.House is not null) return Ok(viking.House.XmlData); + else return Ok(""); + } + + return Ok(""); + } + + [HttpPost] + //[Produces("application/xml")] + [Route("ContentWebService.asmx/GetSceneByUserId")] // used by World Of Jumpstart + public IActionResult GetSceneByUserId([FromForm] Guid userId, [FromForm] string sceneName) { + SceneData? scene = ctx.Vikings.FirstOrDefault(e => e.Uid == userId)?.SceneData.FirstOrDefault(x => x.SceneName == sceneName); + + if (scene is not null) return Ok(scene.XmlData); + else return Ok(null); + } + + [HttpPost] + [Produces("application/xml")] + [Route("ContentWebService.asmx/SetScene")] // used by World of Jumpstart + [VikingSession] + public IActionResult SetScene(Viking viking, [FromForm] string sceneName, [FromForm] string contentXml) { + SceneData? existingScene = viking.SceneData.FirstOrDefault(e => e.SceneName == sceneName); + + if(existingScene is not null) + { + existingScene.XmlData = contentXml; + ctx.SaveChanges(); + return Ok(true); + } + else + { + SceneData sceneData = new SceneData + { + SceneName = sceneName, + XmlData = contentXml + }; + viking.SceneData.Add(sceneData); + ctx.SaveChanges(); + return Ok(true); + } + } + + [HttpPost] + [Produces("application/xml")] + [Route("ContentWebService.asmx/SetHouse")] // used by World Of Jumpstart + [VikingSession] + public IActionResult SetHouse(Viking viking, [FromForm] string contentXml) { + HouseData? house = viking.House; + + if(house is null) + { + HouseData newHouse = new HouseData{ XmlData = contentXml }; + viking.House = newHouse; + ctx.SaveChanges(); + return Ok(true); + } else + { + house.XmlData = contentXml; + ctx.SaveChanges(); + return Ok(true); + } } [HttpPost] @@ -1634,7 +1718,7 @@ public class ContentController : Controller { GetGameDataRequest request = XmlUtil.DeserializeXml(gameDataRequest); return Ok(gameDataService.GetGameDataForPlayer(viking, request)); } - + [HttpPost] [Produces("application/xml")] [Route("ContentWebService.asmx/GetUserGameCurrency")] diff --git a/src/Model/DBContext.cs b/src/Model/DBContext.cs index 900dcd8..82cc8ae 100644 --- a/src/Model/DBContext.cs +++ b/src/Model/DBContext.cs @@ -15,6 +15,8 @@ public class DBContext : DbContext { public DbSet InventoryItems { get; set; } = null!; public DbSet MissionStates { get; set; } = null!; public DbSet Rooms { get; set; } = null!; + public DbSet SceneData { get; set; } = null!; + public DbSet Houses { get; set; } = null!; public DbSet RoomItems { get; set; } = null!; public DbSet GameData { get; set; } = null!; public DbSet GameDataPairs { get; set; } = null!; @@ -94,6 +96,12 @@ public class DBContext : DbContext { builder.Entity().HasMany(v => v.Rooms) .WithOne(e => e.Viking); + builder.Entity().HasMany(v => v.SceneData) + .WithOne(e => e.Viking); + + builder.Entity().HasOne(v => v.House) + .WithOne(e => e.Viking); + builder.Entity().HasMany(v => v.AchievementPoints) .WithOne(e => e.Viking); @@ -224,5 +232,12 @@ public class DBContext : DbContext { builder.Entity().HasOne(i => i.Viking) .WithMany(i => i.ProfileAnswers) .HasForeignKey(e => e.VikingId); + + builder.Entity().HasOne(i => i.Viking) + .WithMany(i => i.SceneData) + .HasForeignKey(e => e.VikingId); + + builder.Entity().HasOne(i => i.Viking) + .WithOne(e => e.House); } } diff --git a/src/Model/HouseData.cs b/src/Model/HouseData.cs new file mode 100644 index 0000000..daf8074 --- /dev/null +++ b/src/Model/HouseData.cs @@ -0,0 +1,13 @@ +using System.ComponentModel.DataAnnotations; + +namespace sodoff.Model +{ + public class HouseData + { + [Key] + public int Id { get; set; } + public int VikingId { get; set; } + public virtual Viking Viking { get; set; } = null!; + public string XmlData { get; set; } = null!; + } +} diff --git a/src/Model/SceneData.cs b/src/Model/SceneData.cs new file mode 100644 index 0000000..5e17821 --- /dev/null +++ b/src/Model/SceneData.cs @@ -0,0 +1,14 @@ +using System.ComponentModel.DataAnnotations; + +namespace sodoff.Model +{ + public class SceneData + { + [Key] + public int Id { get; set; } + public int VikingId { get; set; } + public string SceneName { get; set; } = null!; + public string XmlData { get; set; } = null!; + public virtual Viking Viking { get; set; } = null!; + } +} diff --git a/src/Model/Viking.cs b/src/Model/Viking.cs index 0905147..4659dbc 100644 --- a/src/Model/Viking.cs +++ b/src/Model/Viking.cs @@ -27,6 +27,8 @@ public class Viking { public virtual ICollection MissionStates { get; set; } = null!; public virtual ICollection TaskStatuses { get; set; } = null!; public virtual ICollection Rooms { get; set; } = null!; + public virtual ICollection SceneData { get; set; } = null!; + public virtual HouseData House { get; set; } = null!; public virtual ICollection AchievementPoints { get; set; } = null!; public virtual ICollection PairData { get; set; } = null!; public virtual ICollection InventoryItems { get; set; } = null!;