using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; using System.Reflection; using System.Threading.Tasks; using AutoMapper; using AutoMapper.QueryableExtensions; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using TOOHUCardAPI.Data; using TOOHUCardAPI.Data.Models; using TOOHUCardAPI.Data.Repositories; using TOOHUCardAPI.Data.Services; using TOOHUCardAPI.DTO; using TOOHUCardAPI.DTO.PlayerData; namespace TOOHUCardAPI.Controllers { [Route("api/[controller]")] [ApiController] public class PlayerDataController : MethodBasedController { private readonly ILogger _logger; private readonly UserService _userService; private readonly IMapper _mapper; private readonly StoreService _storeService; public PlayerDataController(ILogger logger, UserService userService, IMapper mapper, StoreService storeService) { _logger = logger; _userService = userService; _mapper = mapper; _storeService = storeService; } [EndpointHandler("save_pet_custom")] private async Task SavePetData(string body) { PlayerDataSavePetCustomRequest request = JsonConvert.DeserializeObject(body); await _userService.SavePetData(request.SteamId, request.PetModel, request.PetEffect); return Ok(new OkResponse()); } [EndpointHandler("save_power_max")] private async Task SavePowerMax(string body) { PlayerDataSavePowerMaxTotalRequest request = JsonConvert.DeserializeObject(body); await _storeService.ChangePowerMaxTotal(request.SteamId, request.Op == "add" ? 1 : -1); return Ok(new OkResponse()); } [EndpointHandler("save_card_level")] private async Task SaveCardLevel(string body) { PlayerDataSaveCardLevelRequest request = JsonConvert.DeserializeObject(body); int totalCost = await _storeService.LevelUpCard(request.SteamId, request.CardItemCode, request.LevelIncrease); return Ok(new PlayerDataSaveCardLevelResponse { TotalCost = totalCost }); } [EndpointHandler("day_first_win")] private async Task GiveFirstWin(string body) { PlayerDataFirstWinRequest request = JsonConvert.DeserializeObject(body); var bonusPoints = await _storeService.GiveFirstWinBonus(request.SteamId); return Ok(new PlayerDataFirstWinResponse { BonusPoints = bonusPoints }); } [EndpointHandler("save_key_count")] private async Task SaveKeyCount(string body) { PlayerDataSaveKeyCountRequest request = JsonConvert.DeserializeObject(body); await _storeService.SaveKeyTotal(request.SteamId, request.KeyTotal, request.KeyUseCount); return Ok(new OkResponse()); } [EndpointHandler("buy_key")] private async Task BuyMagicKey(string body) { PlayerDataBuyMagicKeyRequest request = JsonConvert.DeserializeObject(body); var totalCost = await _storeService.PurchaseMagicKey(request.Count, request.SteamId); return Ok(new PlayerDataBuyMagicKeyResponse { TotalCost = totalCost }); } [EndpointHandler("save_card_group")] private async Task SaveCardGroup(string body) { PlayerDataSaveCardGroupRequest request = JsonConvert.DeserializeObject(body); await _userService.SaveCardGroup(request.SteamId, request.GroupKey, request.GroupData); return Ok(new OkResponse()); } [EndpointHandler("get")] private async Task Get(string body) { PlayerDataGetRequestObject requestObject = JsonConvert.DeserializeObject(body); IEnumerable users = new List(); foreach (var val in requestObject.Ids.Values) { users = users.Append(await _userService.LoginUser(val)); // threading errors, can't use linq here } Dictionary players = users .Select(((user, i) => KeyValuePair.Create(i, user.ToGetResponse(_mapper)))) .ToDictionary(kv => kv.Key, kv => kv.Value); PlayerDataGetResponseObject response = new PlayerDataGetResponseObject() { Players = players }; return Ok(response); } } }