Trying out some json converters
This commit is contained in:
@@ -114,7 +114,11 @@ namespace TOOHUCardAPI.Controllers
|
|||||||
private async Task<IActionResult> Get(string body)
|
private async Task<IActionResult> Get(string body)
|
||||||
{
|
{
|
||||||
PlayerDataGetRequestObject requestObject = JsonConvert.DeserializeObject<PlayerDataGetRequestObject>(body);
|
PlayerDataGetRequestObject requestObject = JsonConvert.DeserializeObject<PlayerDataGetRequestObject>(body);
|
||||||
IEnumerable<User> users = await Task.WhenAll(requestObject.Ids.Values.Select(val => _userService.LoginUser(val)));
|
IEnumerable<User> users = new List<User>();
|
||||||
|
foreach (var val in requestObject.Ids.Values)
|
||||||
|
{
|
||||||
|
users = users.Append(await _userService.LoginUser(val)); // threading errors
|
||||||
|
}
|
||||||
IEnumerable<long> queriedUserSteamIds = requestObject.Ids.Select(i => i.Value);
|
IEnumerable<long> queriedUserSteamIds = requestObject.Ids.Select(i => i.Value);
|
||||||
IEnumerable<PlayerDataGetResponseObjectPlayer> responsePlayers = users
|
IEnumerable<PlayerDataGetResponseObjectPlayer> responsePlayers = users
|
||||||
.Where(user => queriedUserSteamIds.Contains(user.SteamId))
|
.Where(user => queriedUserSteamIds.Contains(user.SteamId))
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ namespace TOOHUCardAPI.DTO.PlayerData
|
|||||||
[JsonProperty("power_max_total")] public int PowerMaxTotal { get; set; }
|
[JsonProperty("power_max_total")] public int PowerMaxTotal { get; set; }
|
||||||
[JsonProperty("pet_model")] public string PetModel { get; set; }
|
[JsonProperty("pet_model")] public string PetModel { get; set; }
|
||||||
[JsonProperty("pet_effect")] public string PetEffect { get; set; }
|
[JsonProperty("pet_effect")] public string PetEffect { get; set; }
|
||||||
|
public Dictionary<string, string> EncodedCardGroups { get; set; }
|
||||||
|
|
||||||
public Dictionary<string, object> ToDynamicProperties()
|
public Dictionary<string, object> ToDynamicProperties()
|
||||||
{
|
{
|
||||||
@@ -52,6 +53,9 @@ namespace TOOHUCardAPI.DTO.PlayerData
|
|||||||
PlayerDataGetResponseObjectPlayer responseObject = mapper.Map<PlayerDataGetResponseObjectPlayer>(user);
|
PlayerDataGetResponseObjectPlayer responseObject = mapper.Map<PlayerDataGetResponseObjectPlayer>(user);
|
||||||
responseObject.IsFirstWin = user.LastFirstWin.AddDays(1) < DateTime.Now ? 1 : 0;
|
responseObject.IsFirstWin = user.LastFirstWin.AddDays(1) < DateTime.Now ? 1 : 0;
|
||||||
responseObject.LevelList = user.CardLevels.EncodeLevelList();
|
responseObject.LevelList = user.CardLevels.EncodeLevelList();
|
||||||
|
responseObject.EncodedCardGroups = user.EncodedCardGroups
|
||||||
|
.Select(ecg => KeyValuePair.Create(ecg.GroupKey, ecg.EncodedString))
|
||||||
|
.ToDictionary(kv => kv.Key, kv => kv.Value);
|
||||||
return responseObject;
|
return responseObject;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
14
TOOHUCardAPI/DTO/RankData/RankCardDTO.cs
Normal file
14
TOOHUCardAPI/DTO/RankData/RankCardDTO.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace TOOHUCardAPI.DTO.RankData
|
||||||
|
{
|
||||||
|
public class RankCardDTO
|
||||||
|
{
|
||||||
|
public string ItemName { get; set; }
|
||||||
|
public int Star { get; set; }
|
||||||
|
public long Damage { get; set; }
|
||||||
|
public int Power { get; set; }
|
||||||
|
public int Attack { get; set; }
|
||||||
|
public Dictionary<int, string> Equip { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,18 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace TOOHUCardAPI.DTO.RankData
|
namespace TOOHUCardAPI.DTO.RankData
|
||||||
{
|
{
|
||||||
public class RankDataGetResponse : OkResponse
|
public class RankDataGetResponse : OkResponse
|
||||||
{
|
{
|
||||||
|
[JsonProperty("bo")]
|
||||||
|
public RankDataGetResponseBody Body { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RankDataGetResponseBody
|
||||||
|
{
|
||||||
|
[JsonProperty()]
|
||||||
|
public Dictionary<int, object> FFAEntries { get; set; }
|
||||||
|
public Dictionary<int, object> TeamEntries { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
17
TOOHUCardAPI/DTO/RankData/RankEntryDTO.cs
Normal file
17
TOOHUCardAPI/DTO/RankData/RankEntryDTO.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace TOOHUCardAPI.DTO.RankData
|
||||||
|
{
|
||||||
|
public class RankEntryDTO
|
||||||
|
{
|
||||||
|
public string RankType { get; set; }
|
||||||
|
public long SteamId { get; set; }
|
||||||
|
public long UserId { get; set; }
|
||||||
|
public string Username { get; set; }
|
||||||
|
public string Version { get; set; }
|
||||||
|
public int Wave { get; set; }
|
||||||
|
public long Damage { get; set; }
|
||||||
|
// need cards here
|
||||||
|
public List<RankCardDTO> Cards { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using TOOHUCardAPI.DTO.PlayerData;
|
||||||
|
|
||||||
|
namespace TOOHUCardAPI.Data.JsonConverters
|
||||||
|
{
|
||||||
|
public class PlayerDataGetResponseObjectPlayerConverter : JsonConverter<PlayerDataGetResponseObjectPlayer>
|
||||||
|
{
|
||||||
|
public override void WriteJson(JsonWriter writer, PlayerDataGetResponseObjectPlayer value, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
var encodedCardGroups = value.EncodedCardGroups;
|
||||||
|
value.EncodedCardGroups = null;
|
||||||
|
JObject jo = JObject.FromObject(value);
|
||||||
|
foreach (var (key, s) in encodedCardGroups)
|
||||||
|
{
|
||||||
|
jo[key] = s;
|
||||||
|
}
|
||||||
|
jo.WriteTo(writer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override PlayerDataGetResponseObjectPlayer ReadJson(JsonReader reader, Type objectType,
|
||||||
|
PlayerDataGetResponseObjectPlayer existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
JObject jo = JObject.Load(reader);
|
||||||
|
PlayerDataGetResponseObjectPlayer playerObject = existingValue ?? new PlayerDataGetResponseObjectPlayer();
|
||||||
|
serializer.Populate(reader, playerObject);
|
||||||
|
playerObject.EncodedCardGroups = jo.Properties().Where(prop => prop.Name.Contains("cardgroup"))
|
||||||
|
.Select(prop => KeyValuePair.Create(prop.Name, prop.Value.ToObject<string>()))
|
||||||
|
.ToDictionary(kv => kv.Key, kv => kv.Value);
|
||||||
|
return playerObject;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
36
TOOHUCardAPI/Data/JsonConverters/RankEntryDTOConverter.cs
Normal file
36
TOOHUCardAPI/Data/JsonConverters/RankEntryDTOConverter.cs
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using TOOHUCardAPI.DTO.RankData;
|
||||||
|
|
||||||
|
namespace TOOHUCardAPI.Data.JsonConverters
|
||||||
|
{
|
||||||
|
public class RankEntryDTOConverter : JsonConverter<RankEntryDTO>
|
||||||
|
{
|
||||||
|
public override void WriteJson(JsonWriter writer, RankEntryDTO value, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
List<RankCardDTO> cards = value.Cards;
|
||||||
|
value.Cards = null;
|
||||||
|
JObject jo = JObject.FromObject(value);
|
||||||
|
for (int i = 0; i < cards.Count; i++)
|
||||||
|
{
|
||||||
|
jo[$"card{i}"] = JObject.FromObject(cards[i]);
|
||||||
|
|
||||||
|
}
|
||||||
|
jo.WriteTo(writer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override RankEntryDTO ReadJson(JsonReader reader, Type objectType, RankEntryDTO existingValue, bool hasExistingValue,
|
||||||
|
JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
JObject jo = JObject.Load(reader);
|
||||||
|
RankEntryDTO dto = new RankEntryDTO();
|
||||||
|
serializer.Populate(reader, dto);
|
||||||
|
dto.Cards = jo.Properties().Where(prop => prop.Name.Contains("card"))
|
||||||
|
.Select(i => i.Value.ToObject<RankCardDTO>()).ToList();
|
||||||
|
return dto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,8 +12,10 @@ using Microsoft.Extensions.DependencyInjection;
|
|||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.OpenApi.Models;
|
using Microsoft.OpenApi.Models;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using NLog.Extensions.Logging;
|
using NLog.Extensions.Logging;
|
||||||
using TOOHUCardAPI.Data;
|
using TOOHUCardAPI.Data;
|
||||||
|
using TOOHUCardAPI.Data.JsonConverters;
|
||||||
using TOOHUCardAPI.Data.Repositories;
|
using TOOHUCardAPI.Data.Repositories;
|
||||||
using TOOHUCardAPI.Data.Services;
|
using TOOHUCardAPI.Data.Services;
|
||||||
|
|
||||||
@@ -32,7 +34,14 @@ namespace TOOHUCardAPI
|
|||||||
// This method gets called by the runtime. Use this method to add services to the container.
|
// This method gets called by the runtime. Use this method to add services to the container.
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
services.AddControllers().AddNewtonsoftJson();
|
services.AddControllers().AddNewtonsoftJson(opt =>
|
||||||
|
{
|
||||||
|
opt.SerializerSettings.Converters = new List<JsonConverter>
|
||||||
|
{
|
||||||
|
new RankEntryDTOConverter(),
|
||||||
|
new PlayerDataGetResponseObjectPlayerConverter()
|
||||||
|
};
|
||||||
|
});
|
||||||
services.AddDbContext<AppDbContext>(opt =>
|
services.AddDbContext<AppDbContext>(opt =>
|
||||||
{
|
{
|
||||||
opt.UseNpgsql(Configuration.GetConnectionString("postgres"));
|
opt.UseNpgsql(Configuration.GetConnectionString("postgres"));
|
||||||
|
|||||||
Reference in New Issue
Block a user