From 160093890247c782690266e89e64b8a12d60d830 Mon Sep 17 00:00:00 2001 From: Alan Moon Date: Sat, 9 Dec 2023 16:43:17 -0800 Subject: [PATCH] WoJS: Use DisplayName in GamesData - Use DisplayName instead of Viking Name Co-authored-by: Robert Paciorek --- src/Controllers/Common/ContentController.cs | 8 +++--- src/Services/GameDataService.cs | 27 +++++++++++++++++---- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/Controllers/Common/ContentController.cs b/src/Controllers/Common/ContentController.cs index 5ce28e8..c0af146 100644 --- a/src/Controllers/Common/ContentController.cs +++ b/src/Controllers/Common/ContentController.cs @@ -2123,17 +2123,17 @@ public class ContentController : Controller { [Produces("application/xml")] [Route("ContentWebService.asmx/GetGameDataByGame")] [VikingSession(UseLock = true)] - public IActionResult GetGameDataByGame(Viking viking, [FromForm] int gameId, bool isMultiplayer, int difficulty, int gameLevel, string key, int count, bool AscendingOrder, int score, bool buddyFilter) { - return Ok(gameDataService.GetGameData(viking, gameId, isMultiplayer, difficulty, gameLevel, key, count, AscendingOrder, buddyFilter)); + public IActionResult GetGameDataByGame(Viking viking, [FromForm] int gameId, bool isMultiplayer, int difficulty, int gameLevel, string key, int count, bool AscendingOrder, int score, bool buddyFilter, string apiKey) { + return Ok(gameDataService.GetGameData(viking, gameId, isMultiplayer, difficulty, gameLevel, key, count, AscendingOrder, buddyFilter, apiKey)); } [HttpPost] [Produces("application/xml")] [Route("V2/ContentWebService.asmx/GetGameDataByGameForDateRange")] [VikingSession(UseLock = true)] - public IActionResult GetGameDataByGameForDateRange(Viking viking, [FromForm] int gameId, bool isMultiplayer, int difficulty, int gameLevel, string key, int count, bool AscendingOrder, int score, string startDate, string endDate, bool buddyFilter) { + public IActionResult GetGameDataByGameForDateRange(Viking viking, [FromForm] int gameId, bool isMultiplayer, int difficulty, int gameLevel, string key, int count, bool AscendingOrder, int score, string startDate, string endDate, bool buddyFilter, string apiKey) { CultureInfo usCulture = new CultureInfo("en-US", false); - return Ok(gameDataService.GetGameData(viking, gameId, isMultiplayer, difficulty, gameLevel, key, count, AscendingOrder, buddyFilter, DateTime.Parse(startDate, usCulture), DateTime.Parse(endDate, usCulture))); + return Ok(gameDataService.GetGameData(viking, gameId, isMultiplayer, difficulty, gameLevel, key, count, AscendingOrder, buddyFilter, apiKey, DateTime.Parse(startDate, usCulture), DateTime.Parse(endDate, usCulture))); } [HttpPost] diff --git a/src/Services/GameDataService.cs b/src/Services/GameDataService.cs index dc40974..c0ff7e2 100644 --- a/src/Services/GameDataService.cs +++ b/src/Services/GameDataService.cs @@ -2,6 +2,7 @@ using Microsoft.EntityFrameworkCore.Metadata.Internal; using sodoff.Model; using sodoff.Schema; +using sodoff.Util; using System.Text.RegularExpressions; namespace sodoff.Services; @@ -33,7 +34,7 @@ public class GameDataService { return true; } - public GameDataSummary GetGameData(Viking viking, [FromForm] int gameId, bool isMultiplayer, int difficulty, int gameLevel, string key, int count, bool AscendingOrder, bool buddyFilter, DateTime? startDate = null, DateTime? endDate = null) { + public GameDataSummary GetGameData(Viking viking, int gameId, bool isMultiplayer, int difficulty, int gameLevel, string key, int count, bool AscendingOrder, bool buddyFilter, string apiKey, DateTime? startDate = null, DateTime? endDate = null) { // TODO: Buddy filter List selectedData; IQueryable query = ctx.GameData.Where(x => x.GameId == gameId && x.IsMultiplayer == false && x.Difficulty == difficulty && x.GameLevel == gameLevel); @@ -44,10 +45,26 @@ public class GameDataService { var query2 = query.SelectMany(e => e.GameDataPairs) .Where(x => x.Name == key); - if (AscendingOrder) - selectedData = query2.OrderBy(e => e.Value).Select(e => new GameDataResponse(e.GameData.Viking.Name, e.GameData.Viking.Uid, e.GameData.DatePlayed, e.GameData.Win, e.GameData.Loss, e.Value)).Take(count).ToList(); - else - selectedData = query2.OrderByDescending(e => e.Value).Select(e => new GameDataResponse(e.GameData.Viking.Name, e.GameData.Viking.Uid, e.GameData.DatePlayed, e.GameData.Win, e.GameData.Loss, e.Value)).Take(count).ToList(); + if (ClientVersion.GetVersion(apiKey) == ClientVersion.WoJS) { + // use DisplayName instead of Name + if (AscendingOrder) + selectedData = query2.OrderBy(e => e.Value).Select(e => new GameDataResponse( + XmlUtil.DeserializeXml(e.GameData.Viking.AvatarSerialized).DisplayName, e.GameData.Viking.Uid, e.GameData.DatePlayed, e.GameData.Win, e.GameData.Loss, e.Value) + ).Take(count).ToList(); + else + selectedData = query2.OrderByDescending(e => e.Value).Select(e => new GameDataResponse( + XmlUtil.DeserializeXml(e.GameData.Viking.AvatarSerialized).DisplayName, e.GameData.Viking.Uid, e.GameData.DatePlayed, e.GameData.Win, e.GameData.Loss, e.Value) + ).Take(count).ToList(); + } else { + if (AscendingOrder) + selectedData = query2.OrderBy(e => e.Value).Select(e => new GameDataResponse( + e.GameData.Viking.Name, e.GameData.Viking.Uid, e.GameData.DatePlayed, e.GameData.Win, e.GameData.Loss, e.Value) + ).Take(count).ToList(); + else + selectedData = query2.OrderByDescending(e => e.Value).Select(e => new GameDataResponse( + e.GameData.Viking.Name, e.GameData.Viking.Uid, e.GameData.DatePlayed, e.GameData.Win, e.GameData.Loss, e.Value) + ).Take(count).ToList(); + } return GetSummaryFromResponse(viking, isMultiplayer, difficulty, gameLevel, key, selectedData); }