more rank stuff, might be ready for use

This commit is contained in:
2021-11-07 00:24:33 -04:00
parent d87377c25c
commit 6f591af5ae
13 changed files with 1350 additions and 5 deletions

View File

@@ -5,7 +5,10 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using TOOHUCardAPI.Data;
using TOOHUCardAPI.Data.Enums;
using TOOHUCardAPI.Data.JsonConverters;
using TOOHUCardAPI.Data.Services;
using TOOHUCardAPI.DTO;
using TOOHUCardAPI.DTO.RankData;
@@ -29,6 +32,14 @@ namespace TOOHUCardAPI.Controllers
_userService = userService;
}
[EndpointHandler("upload")]
private async Task<IActionResult> UploadRankData(string body)
{
RankEntryDTO uploadrequest = JsonConvert.DeserializeObject<RankEntryDTO>(body, new RankEntryDTOConverter());
await _rankService.UploadRankEntry(uploadrequest);
return Ok(new OkResponse());
}
[HttpGet]
public async Task<IActionResult> GetRankData(string rank_type)
{

View File

@@ -37,6 +37,7 @@ namespace TOOHUCardAPI.DTO.PlayerData
[JsonProperty("power_max_total")] public int PowerMaxTotal { get; set; }
[JsonProperty("pet_model")] public string PetModel { get; set; }
[JsonProperty("pet_effect")] public string PetEffect { get; set; }
[JsonIgnore]
public Dictionary<string, string> EncodedCardGroups { get; set; }
public Dictionary<string, object> ToDynamicProperties()

View File

@@ -1,11 +1,13 @@
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using TOOHUCardAPI.Data.Models;
namespace TOOHUCardAPI.DTO.RankData
{
public class RankEntryDTO
{
[JsonProperty("rank_type")]
public string RankType { get; set; }
public long SteamId { get; set; }
public long UserId { get; set; }
@@ -13,6 +15,7 @@ namespace TOOHUCardAPI.DTO.RankData
public string Version { get; set; }
public int Wave { get; set; }
public long Damage { get; set; }
[JsonIgnore]
public Dictionary<string, string> Cards { get; set; }
}
@@ -24,7 +27,7 @@ namespace TOOHUCardAPI.DTO.RankData
{
RankType = ((char) rankEntry.RankType).ToString(),
SteamId = rankEntry.User.SteamId,
UserId = 0, // temporary
UserId = rankEntry.AccountId,
Username = rankEntry.Username,
Version = rankEntry.Version,
Wave = rankEntry.Wave,

View File

@@ -25,8 +25,7 @@ namespace TOOHUCardAPI.Data.JsonConverters
JsonSerializer serializer)
{
JObject jo = JObject.Load(reader);
RankEntryDTO dto = new RankEntryDTO();
serializer.Populate(reader, dto);
RankEntryDTO dto = jo.ToObject<RankEntryDTO>();
dto.Cards = jo.Properties().Where(prop => prop.Name.Contains("card"))
.Select(i => KeyValuePair.Create(i.Name, i.Value))
.ToDictionary(kv => kv.Key, kv => kv.Value.ToObject<string>());

View File

@@ -13,6 +13,7 @@ namespace TOOHUCardAPI.Data.Models
public RankType RankType { get; set; }
public string Username { get; set; }
public User User { get; set; }
public long AccountId { get; set; }
public string Version { get; set; }
public int Wave { get; set; }
public long Damage { get; set; }

View File

@@ -22,7 +22,7 @@ namespace TOOHUCardAPI.Data.Repositories
private IQueryable<RankEntry> AllIncluded()
{
return _appDbContext.RankEntries.Include(i => i.TowersUsed);
return _appDbContext.RankEntries.Include(i => i.TowersUsed).Include(i => i.User);
}
public async Task<IEnumerable<RankEntry>> GetRankEntries(RankType rankType)
@@ -33,6 +33,7 @@ namespace TOOHUCardAPI.Data.Repositories
public async Task InsertRankEntry(RankEntry entry)
{
await _appDbContext.RankEntries.AddAsync(entry);
await _appDbContext.SaveChangesAsync();
}
}
}

View File

@@ -25,6 +25,7 @@ namespace TOOHUCardAPI.Data.Services
public async Task<List<RankEntryDTO>> 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();
}
@@ -40,12 +41,14 @@ namespace TOOHUCardAPI.Data.Services
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);
}
}
}

View File

@@ -0,0 +1,184 @@
{
"info": {
"_postman_id": "ca7d06a8-ff57-4c17-bfb0-b7fd504dcf40",
"name": "2HU API",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "PlayerData",
"item": [
{
"name": "Get Test User",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"method\": \"get\",\n \"ids\": {\n \"0\": \"123\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{BaseURL}}PlayerData",
"host": [
"{{BaseURL}}PlayerData"
]
}
},
"response": []
},
{
"name": "Save Test Card Group",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"method\": \"save_card_group\",\n \"steamid\": \"123\",\n \"group_key\": \"1\",\n \"group_data\": \"test\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{BaseURL}}PlayerData",
"host": [
"{{BaseURL}}PlayerData"
]
}
},
"response": []
}
]
},
{
"name": "GameConfig",
"item": [
{
"name": "Get Gameconfig",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "{{BaseURL}}GameConfig",
"host": [
"{{BaseURL}}GameConfig"
]
}
},
"response": []
}
]
},
{
"name": "PlayerBaseData",
"item": [
{
"name": "PlayerBaseData",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "{{BaseURL}}PlayerBaseData?id=123",
"host": [
"{{BaseURL}}PlayerBaseData"
],
"query": [
{
"key": "id",
"value": "123"
}
]
}
},
"response": []
}
]
},
{
"name": "RankData",
"item": [
{
"name": "Get",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "{{BaseURL}}RankData?rank_type=all",
"host": [
"{{BaseURL}}RankData"
],
"query": [
{
"key": "rank_type",
"value": "all"
}
]
}
},
"response": []
},
{
"name": "Upload",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"method\": \"upload\",\n \"rank_type\": \"S\",\n \"steamid\": \"123\",\n \"userid\": \"12345\",\n \"username\": \"debug\",\n \"version\": \"S8\",\n \"wave\": 5,\n \"damage\": 5,\n \"card1\": \"debug\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{BaseURL}}RankData",
"host": [
"{{BaseURL}}RankData"
]
}
},
"response": []
}
]
}
],
"event": [
{
"listen": "prerequest",
"script": {
"type": "text/javascript",
"exec": [
""
]
}
},
{
"listen": "test",
"script": {
"type": "text/javascript",
"exec": [
"pm.test(\"Status code is 200\", function () {",
" pm.response.to.have.status(200);",
"});",
"pm.test(\"Body response code is 0000\", function () {",
" var jsonData = pm.response.json();",
" pm.expect(jsonData.code).to.eql(\"0000\");",
"});"
]
}
}
],
"variable": [
{
"key": "BaseURL",
"value": "https://192.168.1.103:5001/api/"
}
]
}

View File

@@ -0,0 +1,24 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace TOOHUCardAPI.Migrations
{
public partial class useridtorankentrydunnohowtograbitforauser : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<long>(
name: "AccountId",
table: "RankEntries",
type: "bigint",
nullable: false,
defaultValue: 0L);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "AccountId",
table: "RankEntries");
}
}
}

View File

@@ -947,6 +947,9 @@ namespace TOOHUCardAPI.Migrations
.HasColumnType("integer")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<long>("AccountId")
.HasColumnType("bigint");
b.Property<long>("Damage")
.HasColumnType("bigint");

View File

@@ -56,6 +56,7 @@ namespace TOOHUCardAPI
services.AddLogging(opt =>
{
opt.ClearProviders();
opt.AddConfiguration(Configuration.GetSection("Logging"));
opt.AddNLog();
});

View File

@@ -4,7 +4,7 @@
autoReload="true"
internalLogToConsole="true"
throwConfigExceptions="true"
internalLogLevel="Trace" >
internalLogLevel="Warn" >
<variable name="MicrosoftLevel" value="${level:lowercase=true:truncate=4:when=level==LogLevel.Info or level==LogLevel.Warn}${when:when=level==LogLevel.Error:inner=fail}${when:when=level==LogLevel.Fatal:inner=crit}${when:when=level==LogLevel.Debug:inner=dbug}${when:when=level==LogLevel.Trace:inner=trce}" />
<variable name="MicrosoftLayout" value="${MicrosoftLevel}: ${logger}[${event-properties:EventId_Id:whenEmpty=0}]${newline} ${message}${onexception:inner=${newline}${exception:format=tostring}}" />