From f23d108fe7abb14358215e59d7077342d69b3aef Mon Sep 17 00:00:00 2001 From: littlefoot Date: Sat, 6 Nov 2021 22:18:12 -0400 Subject: [PATCH] I'm an idiot, they store encoded data for towers, we dont need a separate object unless we want to --- .../Controllers/RankDataController.cs | 23 +--------- TOOHUCardAPI/DTO/RankData/RankCardDTO.cs | 14 ------ TOOHUCardAPI/DTO/RankData/RankEntryDTO.cs | 24 ++++++++++- TOOHUCardAPI/Data/Enums/RankType.cs | 24 +++++++++++ .../JsonConverters/RankEntryDTOConverter.cs | 10 ++--- TOOHUCardAPI/Data/Models/RankEntry.cs | 1 + TOOHUCardAPI/Data/Models/RankTowerEntry.cs | 8 +--- .../Data/Repositories/RankRepository.cs | 38 ++++++++++++++++ TOOHUCardAPI/Data/Services/RankService.cs | 43 ++++++++++++++++++- 9 files changed, 135 insertions(+), 50 deletions(-) delete mode 100644 TOOHUCardAPI/DTO/RankData/RankCardDTO.cs create mode 100644 TOOHUCardAPI/Data/Repositories/RankRepository.cs diff --git a/TOOHUCardAPI/Controllers/RankDataController.cs b/TOOHUCardAPI/Controllers/RankDataController.cs index a2dc727..89ae18e 100644 --- a/TOOHUCardAPI/Controllers/RankDataController.cs +++ b/TOOHUCardAPI/Controllers/RankDataController.cs @@ -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 GetRankData(string rank_type) { - RankType parsedRankType = ParseRankType(rank_type); + RankType parsedRankType = RankTypeExtensions.ParseRankType(rank_type); return Ok(new OkResponse()); } diff --git a/TOOHUCardAPI/DTO/RankData/RankCardDTO.cs b/TOOHUCardAPI/DTO/RankData/RankCardDTO.cs deleted file mode 100644 index 92e7e03..0000000 --- a/TOOHUCardAPI/DTO/RankData/RankCardDTO.cs +++ /dev/null @@ -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 Equip { get; set; } - } -} \ No newline at end of file diff --git a/TOOHUCardAPI/DTO/RankData/RankEntryDTO.cs b/TOOHUCardAPI/DTO/RankData/RankEntryDTO.cs index c34ed72..36844aa 100644 --- a/TOOHUCardAPI/DTO/RankData/RankEntryDTO.cs +++ b/TOOHUCardAPI/DTO/RankData/RankEntryDTO.cs @@ -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 Cards { get; set; } + public Dictionary 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) + }; + } } } \ No newline at end of file diff --git a/TOOHUCardAPI/Data/Enums/RankType.cs b/TOOHUCardAPI/Data/Enums/RankType.cs index a7f7608..46f4a88 100644 --- a/TOOHUCardAPI/Data/Enums/RankType.cs +++ b/TOOHUCardAPI/Data/Enums/RankType.cs @@ -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; + } + } } \ No newline at end of file diff --git a/TOOHUCardAPI/Data/JsonConverters/RankEntryDTOConverter.cs b/TOOHUCardAPI/Data/JsonConverters/RankEntryDTOConverter.cs index 59bdba2..80ee238 100644 --- a/TOOHUCardAPI/Data/JsonConverters/RankEntryDTOConverter.cs +++ b/TOOHUCardAPI/Data/JsonConverters/RankEntryDTOConverter.cs @@ -11,13 +11,12 @@ namespace TOOHUCardAPI.Data.JsonConverters { public override void WriteJson(JsonWriter writer, RankEntryDTO value, JsonSerializer serializer) { - List cards = value.Cards; + Dictionary 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()).ToList(); + .Select(i => KeyValuePair.Create(i.Name, i.Value)) + .ToDictionary(kv => kv.Key, kv => kv.Value.ToObject()); return dto; } } diff --git a/TOOHUCardAPI/Data/Models/RankEntry.cs b/TOOHUCardAPI/Data/Models/RankEntry.cs index 50153d7..cd52182 100644 --- a/TOOHUCardAPI/Data/Models/RankEntry.cs +++ b/TOOHUCardAPI/Data/Models/RankEntry.cs @@ -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; } diff --git a/TOOHUCardAPI/Data/Models/RankTowerEntry.cs b/TOOHUCardAPI/Data/Models/RankTowerEntry.cs index 5d97197..4bb4ac0 100644 --- a/TOOHUCardAPI/Data/Models/RankTowerEntry.cs +++ b/TOOHUCardAPI/Data/Models/RankTowerEntry.cs @@ -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 Equipment { get; set; } + public string TowerKey { get; set; } + public string EncodedData { get; set; } } } \ No newline at end of file diff --git a/TOOHUCardAPI/Data/Repositories/RankRepository.cs b/TOOHUCardAPI/Data/Repositories/RankRepository.cs new file mode 100644 index 0000000..851a559 --- /dev/null +++ b/TOOHUCardAPI/Data/Repositories/RankRepository.cs @@ -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 _logger; + + public RankRepository(AppDbContext appDbContext, ILogger logger) + { + _appDbContext = appDbContext; + _logger = logger; + } + + private IQueryable AllIncluded() + { + return _appDbContext.RankEntries.Include(i => i.TowersUsed); + } + + public async Task> GetRankEntries(RankType rankType) + { + return await AllIncluded().Where(i => i.RankType == rankType).ToListAsync(); + } + + public async Task InsertRankEntry(RankEntry entry) + { + await _appDbContext.RankEntries.AddAsync(entry); + } + } +} \ No newline at end of file diff --git a/TOOHUCardAPI/Data/Services/RankService.cs b/TOOHUCardAPI/Data/Services/RankService.cs index 0ec6cc4..d600d4a 100644 --- a/TOOHUCardAPI/Data/Services/RankService.cs +++ b/TOOHUCardAPI/Data/Services/RankService.cs @@ -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 _logger; - + private readonly RankRepository _rankRepository; + private readonly UserRepository _userRepository; + + public RankService(ILogger logger, RankRepository rankRepository, UserRepository userRepository) + { + _logger = logger; + _rankRepository = rankRepository; + _userRepository = userRepository; + } + + public async Task> GetRankEntries(RankType rankType) + { + var rankEntries = await _rankRepository.GetRankEntries(rankType); + return rankEntries.Select(entry => entry.ToRankEntryDTO()).ToList(); + } + + public async Task UploadRankEntry(RankEntryDTO entry) + { + List 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); + } } } \ No newline at end of file