Cleanup code

This commit is contained in:
jvyden 2021-11-04 14:28:50 -04:00
commit 8e193c079f
No known key found for this signature in database
GPG key ID: 18BCF2BE0262B278
8 changed files with 58 additions and 42 deletions

View file

@ -12,7 +12,7 @@ namespace LBPUnion.ProjectLighthouse.Tests
[Fact] [Fact]
public async Task ShouldReturnErrorOnNoPostData() public async Task ShouldReturnErrorOnNoPostData()
{ {
HttpResponseMessage response = await this.Client.PostAsync($"/LITTLEBIGPLANETPS3_XML/login", null!); HttpResponseMessage response = await this.Client.PostAsync("/LITTLEBIGPLANETPS3_XML/login", null!);
Assert.False(response.IsSuccessStatusCode); Assert.False(response.IsSuccessStatusCode);
#if NET6_0_OR_GREATER #if NET6_0_OR_GREATER
Assert.True(response.StatusCode == HttpStatusCode.BadRequest); Assert.True(response.StatusCode == HttpStatusCode.BadRequest);

View file

@ -103,6 +103,7 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=PCKS/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=PCKS/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Swingy/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=Swingy/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=thumbsup/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=thumbsup/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=topscores/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=UCAS/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=UCAS/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=unfavourite/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=unfavourite/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Unpublish/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=Unpublish/@EntryIndexedValue">True</s:Boolean>

View file

@ -1,11 +1,12 @@
using System; using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Serialization; using System.Xml.Serialization;
using LBPUnion.ProjectLighthouse.Types;
using LBPUnion.ProjectLighthouse.Serialization; using LBPUnion.ProjectLighthouse.Serialization;
using LBPUnion.ProjectLighthouse.Types;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace LBPUnion.ProjectLighthouse.Controllers namespace LBPUnion.ProjectLighthouse.Controllers
@ -38,7 +39,7 @@ namespace LBPUnion.ProjectLighthouse.Controllers
if (existingScore.Any()) if (existingScore.Any())
{ {
Score first = existingScore.FirstOrDefault(s => s.SlotId == score.SlotId); Score first = existingScore.First(s => s.SlotId == score.SlotId);
score.ScoreId = first.ScoreId; score.ScoreId = first.ScoreId;
score.Points = Math.Max(first.Points, score.Points); score.Points = Math.Max(first.Points, score.Points);
this.database.Entry(first).CurrentValues.SetValues(score); this.database.Entry(first).CurrentValues.SetValues(score);
@ -53,6 +54,7 @@ namespace LBPUnion.ProjectLighthouse.Controllers
} }
[HttpGet("topscores/user/{slotId:int}/{type:int}")] [HttpGet("topscores/user/{slotId:int}/{type:int}")]
[SuppressMessage("ReSharper", "PossibleMultipleEnumeration")]
public async Task<IActionResult> TopScores(int slotId, int type, [FromQuery] int pageStart, [FromQuery] int pageSize) public async Task<IActionResult> TopScores(int slotId, int type, [FromQuery] int pageStart, [FromQuery] int pageSize)
{ {
// Get username // Get username
@ -60,27 +62,36 @@ namespace LBPUnion.ProjectLighthouse.Controllers
// This is hella ugly but it technically assigns the proper rank to a score // This is hella ugly but it technically assigns the proper rank to a score
// var needed for Anonymous type returned from SELECT // var needed for Anonymous type returned from SELECT
var rankedScores = this.database.Scores var rankedScores = this.database.Scores.Where(s => s.SlotId == slotId && s.Type == type)
.Where(s => s.SlotId == slotId && s.Type == type)
.OrderByDescending(s => s.Points) .OrderByDescending(s => s.Points)
.ToList() .ToList()
.Select((Score s, int rank) => new { Score = s, Rank = rank + 1 }); .Select
(
(Score s, int rank) => new
{
Score = s,
Rank = rank + 1,
}
);
// Find your score, since even if you aren't in the top list your score is pinned // Find your score, since even if you aren't in the top list your score is pinned
var myScore = rankedScores var myScore = rankedScores.Where
.Where(rs => rs.Score.PlayerIdCollection.Contains(user.Username)) (rs => rs.Score.PlayerIdCollection.Contains(user.Username))
.OrderByDescending(rs => rs.Score.Points) .OrderByDescending(rs => rs.Score.Points)
.FirstOrDefault(); .FirstOrDefault();
// Paginated viewing // Paginated viewing
var pagedScores = rankedScores var pagedScores = rankedScores.Skip(pageStart - 1).Take(Math.Min(pageSize, 30));
.Skip(pageStart - 1)
.Take(Math.Min(pageSize, 30));
string serializedScores = Enumerable.Aggregate(pagedScores, string.Empty, (current, rs) => { string serializedScores = pagedScores.Aggregate
rs.Score.Rank = rs.Rank; (
return current + rs.Score.Serialize(); string.Empty,
}); (current, rs) =>
{
rs.Score.Rank = rs.Rank;
return current + rs.Score.Serialize();
}
);
string res; string res;
if (myScore == null) if (myScore == null)
@ -89,14 +100,25 @@ namespace LBPUnion.ProjectLighthouse.Controllers
} }
else else
{ {
res = LbpSerializer.TaggedStringElement("scores", serializedScores, new Dictionary<string, object>() { res = LbpSerializer.TaggedStringElement
{"yourScore", myScore.Score.Points}, (
{"yourRank", myScore.Rank }, //This is the numerator of your position globally in the side menu. "scores",
{"totalNumScores", rankedScores.Count() } // This is the denominator of your position globally in the side menu. serializedScores,
}); new Dictionary<string, object>()
{
{
"yourScore", myScore.Score.Points
},
{
"yourRank", myScore.Rank
}, //This is the numerator of your position globally in the side menu.
{
"totalNumScores", rankedScores.Count()
}, // This is the denominator of your position globally in the side menu.
}
);
} }
return this.Ok(res); return this.Ok(res);
} }
} }

View file

@ -9,10 +9,7 @@ namespace LBPUnion.ProjectLighthouse.Helpers.Extensions
char[] invalidPathChars = Path.GetInvalidFileNameChars(); char[] invalidPathChars = Path.GetInvalidFileNameChars();
string path = text; string path = text;
foreach (char c in invalidPathChars) foreach (char c in invalidPathChars) path = path.Replace(c.ToString(), "");
{
path = path.Replace(c.ToString(), "");
}
return path; return path;
} }

View file

@ -9,6 +9,7 @@ namespace LBPUnion.ProjectLighthouse.Logging
public class LighthouseFileLogger : LoggerBase public class LighthouseFileLogger : LoggerBase
{ {
private static readonly string logsDirectory = Path.Combine(Environment.CurrentDirectory, "logs"); private static readonly string logsDirectory = Path.Combine(Environment.CurrentDirectory, "logs");
public override bool AllowMultiple => false;
public override void Send(LoggerLine line) public override void Send(LoggerLine line)
{ {
@ -22,6 +23,5 @@ namespace LBPUnion.ProjectLighthouse.Logging
File.AppendAllText(Path.Combine(logsDirectory, line.LoggerLevel.Name.ToFileName() + ".log"), contentFile); File.AppendAllText(Path.Combine(logsDirectory, line.LoggerLevel.Name.ToFileName() + ".log"), contentFile);
File.AppendAllText(Path.Combine(logsDirectory, "all.log"), contentAll); File.AppendAllText(Path.Combine(logsDirectory, "all.log"), contentAll);
} }
public override bool AllowMultiple => false;
} }
} }

View file

@ -8,19 +8,19 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="BCrypt.Net-Next" Version="4.0.2" /> <PackageReference Include="BCrypt.Net-Next" Version="4.0.2"/>
<PackageReference Include="Kettu" Version="1.2.0" /> <PackageReference Include="Kettu" Version="1.2.0"/>
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="5.0.11" /> <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="5.0.11"/>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.11" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.11"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.11"> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.11">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="5.0.2" /> <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="5.0.2"/>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Remove="Types\SlotXsd.cs" /> <Compile Remove="Types\SlotXsd.cs"/>
</ItemGroup> </ItemGroup>
</Project> </Project>

View file

@ -27,9 +27,7 @@ namespace LBPUnion.ProjectLighthouse.Serialization
public static string TaggedStringElement(string key, object value, string tagKey, object tagValue) => $"<{key} {tagKey}=\"{tagValue}\">{value}</{key}>"; public static string TaggedStringElement(string key, object value, string tagKey, object tagValue) => $"<{key} {tagKey}=\"{tagValue}\">{value}</{key}>";
public static string TaggedStringElement(string key, object value, Dictionary<string, object> attrKeyValuePairs) public static string TaggedStringElement(string key, object value, Dictionary<string, object> attrKeyValuePairs)
=> $"<{key} " + => $"<{key} " + attrKeyValuePairs.Aggregate(string.Empty, (current, kvp) => current + $"{kvp.Key}=\"{kvp.Value}\" ") + $">{value}</{key}>";
Enumerable.Aggregate(attrKeyValuePairs, string.Empty, (current, kvp) => current + $"{kvp.Key}=\"{kvp.Value}\" ") +
$">{value}</{key}>";
public static string Elements public static string Elements
(params KeyValuePair<string, object>[] pairs) (params KeyValuePair<string, object>[] pairs)

View file

@ -29,16 +29,14 @@ namespace LBPUnion.ProjectLighthouse.Types
[NotMapped] [NotMapped]
[XmlElement("playerIds")] [XmlElement("playerIds")]
public string[] PlayerIds public string[] PlayerIds {
{
get => this.PlayerIdCollection.Split(","); get => this.PlayerIdCollection.Split(",");
set => this.PlayerIdCollection = string.Join(',', value); set => this.PlayerIdCollection = string.Join(',', value);
} }
[NotMapped] [NotMapped]
[XmlElement("mainPlayer")] [XmlElement("mainPlayer")]
public string MainPlayer public string MainPlayer {
{
get => this.PlayerIds[0]; get => this.PlayerIds[0];
set => this.PlayerIds[0] = value; set => this.PlayerIds[0] = value;
} }