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;
|
_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());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.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)
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
|||||||
@@ -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; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user