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:
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
38
TOOHUCardAPI/Data/Repositories/RankRepository.cs
Normal file
38
TOOHUCardAPI/Data/Repositories/RankRepository.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user