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;
}
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]
public async Task<IActionResult> GetRankData(string rank_type)
{
RankType parsedRankType = ParseRankType(rank_type);
RankType parsedRankType = RankTypeExtensions.ParseRankType(rank_type);
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.Linq;
using TOOHUCardAPI.Data.Models;
namespace TOOHUCardAPI.DTO.RankData
{
@@ -11,7 +13,25 @@ namespace TOOHUCardAPI.DTO.RankData
public string Version { get; set; }
public int Wave { get; set; }
public long Damage { get; set; }
// need cards here
public List<RankCardDTO> Cards { get; set; }
public Dictionary<string, string> 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',
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)
{
List<RankCardDTO> cards = value.Cards;
Dictionary<string, string> cards = value.Cards;
value.Cards = null;
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);
}
@@ -29,7 +28,8 @@ namespace TOOHUCardAPI.Data.JsonConverters
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();
.Select(i => KeyValuePair.Create(i.Name, i.Value))
.ToDictionary(kv => kv.Key, kv => kv.Value.ToObject<string>());
return dto;
}
}

View File

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

View File

@@ -9,11 +9,7 @@ namespace TOOHUCardAPI.Data.Models
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public Card BaseUnit { get; set; }
public int Star { get; set; }
public int Damage { get; set; }
public int Attack { get; set; }
public int Power { get; set; }
public List<Card> Equipment { get; set; }
public string TowerKey { get; set; }
public string EncodedData { 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 TOOHUCardAPI.Data.Enums;
using TOOHUCardAPI.Data.Models;
using TOOHUCardAPI.Data.Repositories;
using TOOHUCardAPI.DTO.RankData;
namespace TOOHUCardAPI.Data.Services
{
public class RankService
{
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);
}
}
}