Trying out some json converters
This commit is contained in:
@@ -114,7 +114,11 @@ namespace TOOHUCardAPI.Controllers
|
||||
private async Task<IActionResult> Get(string 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<PlayerDataGetResponseObjectPlayer> responsePlayers = users
|
||||
.Where(user => queriedUserSteamIds.Contains(user.SteamId))
|
||||
|
||||
@@ -37,6 +37,7 @@ namespace TOOHUCardAPI.DTO.PlayerData
|
||||
[JsonProperty("power_max_total")] public int PowerMaxTotal { get; set; }
|
||||
[JsonProperty("pet_model")] public string PetModel { get; set; }
|
||||
[JsonProperty("pet_effect")] public string PetEffect { get; set; }
|
||||
public Dictionary<string, string> EncodedCardGroups { get; set; }
|
||||
|
||||
public Dictionary<string, object> ToDynamicProperties()
|
||||
{
|
||||
@@ -52,6 +53,9 @@ namespace TOOHUCardAPI.DTO.PlayerData
|
||||
PlayerDataGetResponseObjectPlayer responseObject = mapper.Map<PlayerDataGetResponseObjectPlayer>(user);
|
||||
responseObject.IsFirstWin = user.LastFirstWin.AddDays(1) < DateTime.Now ? 1 : 0;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
{
|
||||
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.Logging;
|
||||
using Microsoft.OpenApi.Models;
|
||||
using Newtonsoft.Json;
|
||||
using NLog.Extensions.Logging;
|
||||
using TOOHUCardAPI.Data;
|
||||
using TOOHUCardAPI.Data.JsonConverters;
|
||||
using TOOHUCardAPI.Data.Repositories;
|
||||
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.
|
||||
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 =>
|
||||
{
|
||||
opt.UseNpgsql(Configuration.GetConnectionString("postgres"));
|
||||
|
||||
Reference in New Issue
Block a user