I'm an idiot, they store encoded data for towers, we dont need a separate object unless we want to

This commit is contained in:
2021-11-06 22:18:12 -04:00
parent 7ef9c0d498
commit f23d108fe7
9 changed files with 135 additions and 50 deletions

View File

@@ -28,31 +28,10 @@ namespace TOOHUCardAPI.Controllers
_userService = userService; _userService = userService;
} }
private RankType ParseRankType(string rankType)
{
if (rankType == null || rankType.Length > 1)
{
return RankType.All;
}
char identifier = rankType.ToCharArray()[0];
if (identifier == (char) RankType.Single)
{
return RankType.Single;
}
if (identifier == (char) RankType.Team)
{
return RankType.Team;
}
return RankType.All;
}
[HttpGet] [HttpGet]
public async Task<IActionResult> GetRankData(string rank_type) public async Task<IActionResult> GetRankData(string rank_type)
{ {
RankType parsedRankType = ParseRankType(rank_type); RankType parsedRankType = RankTypeExtensions.ParseRankType(rank_type);
return Ok(new OkResponse()); return Ok(new OkResponse());
} }

View File

@@ -1,14 +0,0 @@
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; }
}
}

View File

@@ -1,4 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using TOOHUCardAPI.Data.Models;
namespace TOOHUCardAPI.DTO.RankData namespace TOOHUCardAPI.DTO.RankData
{ {
@@ -11,7 +13,25 @@ namespace TOOHUCardAPI.DTO.RankData
public string Version { get; set; } public string Version { get; set; }
public int Wave { get; set; } public int Wave { get; set; }
public long Damage { get; set; } public long Damage { get; set; }
// need cards here public Dictionary<string, string> Cards { get; set; }
public List<RankCardDTO> Cards { get; set; } }
public static class RankEntryDTOExtensions
{
public static RankEntryDTO ToRankEntryDTO(this RankEntry rankEntry)
{
return new RankEntryDTO
{
RankType = ((char) rankEntry.RankType).ToString(),
SteamId = rankEntry.User.SteamId,
UserId = 0, // temporary
Username = rankEntry.Username,
Version = rankEntry.Version,
Wave = rankEntry.Wave,
Damage = rankEntry.Damage,
Cards = rankEntry.TowersUsed.Select(tower => KeyValuePair.Create(tower.TowerKey, tower.EncodedData))
.ToDictionary(kv => kv.Key, kv => kv.Value)
};
}
} }
} }

View File

@@ -6,4 +6,28 @@ namespace TOOHUCardAPI.Data.Enums
Team = 'D', Team = 'D',
All = 'T' All = 'T'
} }
public static class RankTypeExtensions
{
public static RankType ParseRankType(string rankType)
{
if (rankType == null || rankType.Length > 1)
{
return RankType.All;
}
char identifier = rankType.ToCharArray()[0];
if (identifier == (char) RankType.Single)
{
return RankType.Single;
}
if (identifier == (char) RankType.Team)
{
return RankType.Team;
}
return RankType.All;
}
}
} }

View File

@@ -11,13 +11,12 @@ namespace TOOHUCardAPI.Data.JsonConverters
{ {
public override void WriteJson(JsonWriter writer, RankEntryDTO value, JsonSerializer serializer) public override void WriteJson(JsonWriter writer, RankEntryDTO value, JsonSerializer serializer)
{ {
List<RankCardDTO> cards = value.Cards; Dictionary<string, string> cards = value.Cards;
value.Cards = null; value.Cards = null;
JObject jo = JObject.FromObject(value); JObject jo = JObject.FromObject(value);
for (int i = 0; i < cards.Count; i++) foreach (var kv in cards)
{ {
jo[$"card{i}"] = JObject.FromObject(cards[i]); jo[kv.Key] = kv.Value;
} }
jo.WriteTo(writer); jo.WriteTo(writer);
} }
@@ -29,7 +28,8 @@ namespace TOOHUCardAPI.Data.JsonConverters
RankEntryDTO dto = new RankEntryDTO(); RankEntryDTO dto = new RankEntryDTO();
serializer.Populate(reader, dto); serializer.Populate(reader, dto);
dto.Cards = jo.Properties().Where(prop => prop.Name.Contains("card")) dto.Cards = jo.Properties().Where(prop => prop.Name.Contains("card"))
.Select(i => i.Value.ToObject<RankCardDTO>()).ToList(); .Select(i => KeyValuePair.Create(i.Name, i.Value))
.ToDictionary(kv => kv.Key, kv => kv.Value.ToObject<string>());
return dto; return dto;
} }
} }

View File

@@ -11,6 +11,7 @@ namespace TOOHUCardAPI.Data.Models
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; } public int Id { get; set; }
public RankType RankType { get; set; } public RankType RankType { get; set; }
public string Username { get; set; }
public User User { get; set; } public User User { get; set; }
public string Version { get; set; } public string Version { get; set; }
public int Wave { get; set; } public int Wave { get; set; }

View File

@@ -9,11 +9,7 @@ namespace TOOHUCardAPI.Data.Models
[Key] [Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; } public int Id { get; set; }
public Card BaseUnit { get; set; } public string TowerKey { get; set; }
public int Star { get; set; } public string EncodedData { get; set; }
public int Damage { get; set; }
public int Attack { get; set; }
public int Power { get; set; }
public List<Card> Equipment { get; set; }
} }
} }

View File

@@ -0,0 +1,38 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using TOOHUCardAPI.Data.Enums;
using TOOHUCardAPI.Data.Models;
namespace TOOHUCardAPI.Data.Repositories
{
public class RankRepository
{
private readonly AppDbContext _appDbContext;
private readonly ILogger<RankRepository> _logger;
public RankRepository(AppDbContext appDbContext, ILogger<RankRepository> logger)
{
_appDbContext = appDbContext;
_logger = logger;
}
private IQueryable<RankEntry> AllIncluded()
{
return _appDbContext.RankEntries.Include(i => i.TowersUsed);
}
public async Task<IEnumerable<RankEntry>> GetRankEntries(RankType rankType)
{
return await AllIncluded().Where(i => i.RankType == rankType).ToListAsync();
}
public async Task InsertRankEntry(RankEntry entry)
{
await _appDbContext.RankEntries.AddAsync(entry);
}
}
}

View File

@@ -1,10 +1,51 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using TOOHUCardAPI.Data.Enums;
using TOOHUCardAPI.Data.Models;
using TOOHUCardAPI.Data.Repositories;
using TOOHUCardAPI.DTO.RankData;
namespace TOOHUCardAPI.Data.Services namespace TOOHUCardAPI.Data.Services
{ {
public class RankService public class RankService
{ {
private readonly ILogger<RankService> _logger; private readonly ILogger<RankService> _logger;
private readonly RankRepository _rankRepository;
private readonly UserRepository _userRepository;
public RankService(ILogger<RankService> logger, RankRepository rankRepository, UserRepository userRepository)
{
_logger = logger;
_rankRepository = rankRepository;
_userRepository = userRepository;
}
public async Task<List<RankEntryDTO>> GetRankEntries(RankType rankType)
{
var rankEntries = await _rankRepository.GetRankEntries(rankType);
return rankEntries.Select(entry => entry.ToRankEntryDTO()).ToList();
}
public async Task UploadRankEntry(RankEntryDTO entry)
{
List<RankTowerEntry> towersUsed = entry.Cards.Select(kv => new RankTowerEntry
{
TowerKey = kv.Key,
EncodedData = kv.Value
}).ToList();
RankEntry toUpload = new RankEntry
{
RankType = RankTypeExtensions.ParseRankType(entry.RankType),
Username = entry.Username,
User = await _userRepository.GetUser(entry.SteamId),
Version = entry.Version,
Wave = entry.Wave,
Damage = entry.Damage,
TowersUsed = towersUsed
};
await _rankRepository.InsertRankEntry(toUpload);
}
} }
} }