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); _logger.LogInformation("Got rank entries for {RankType}", rankType.ToString()); 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), AccountId = entry.UserId, Version = entry.Version, Wave = entry.Wave, Damage = entry.Damage, TowersUsed = towersUsed }; await _rankRepository.InsertRankEntry(toUpload); _logger.LogInformation("Uploaded a rank entry for {SteamId}", entry.SteamId); } } }