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]
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);
#if NET6_0_OR_GREATER
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/=Swingy/@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/=unfavourite/@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.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Xml.Serialization;
using LBPUnion.ProjectLighthouse.Types;
using LBPUnion.ProjectLighthouse.Serialization;
using LBPUnion.ProjectLighthouse.Types;
using Microsoft.AspNetCore.Mvc;
namespace LBPUnion.ProjectLighthouse.Controllers
@ -38,7 +39,7 @@ namespace LBPUnion.ProjectLighthouse.Controllers
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.Points = Math.Max(first.Points, score.Points);
this.database.Entry(first).CurrentValues.SetValues(score);
@ -53,6 +54,7 @@ namespace LBPUnion.ProjectLighthouse.Controllers
}
[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)
{
// Get username
@ -60,27 +62,36 @@ namespace LBPUnion.ProjectLighthouse.Controllers
// This is hella ugly but it technically assigns the proper rank to a score
// var needed for Anonymous type returned from SELECT
var rankedScores = this.database.Scores
.Where(s => s.SlotId == slotId && s.Type == type)
var rankedScores = this.database.Scores.Where(s => s.SlotId == slotId && s.Type == type)
.OrderByDescending(s => s.Points)
.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
var myScore = rankedScores
.Where(rs => rs.Score.PlayerIdCollection.Contains(user.Username))
var myScore = rankedScores.Where
(rs => rs.Score.PlayerIdCollection.Contains(user.Username))
.OrderByDescending(rs => rs.Score.Points)
.FirstOrDefault();
// Paginated viewing
var pagedScores = rankedScores
.Skip(pageStart - 1)
.Take(Math.Min(pageSize, 30));
var pagedScores = rankedScores.Skip(pageStart - 1).Take(Math.Min(pageSize, 30));
string serializedScores = Enumerable.Aggregate(pagedScores, string.Empty, (current, rs) => {
rs.Score.Rank = rs.Rank;
return current + rs.Score.Serialize();
});
string serializedScores = pagedScores.Aggregate
(
string.Empty,
(current, rs) =>
{
rs.Score.Rank = rs.Rank;
return current + rs.Score.Serialize();
}
);
string res;
if (myScore == null)
@ -89,14 +100,25 @@ namespace LBPUnion.ProjectLighthouse.Controllers
}
else
{
res = LbpSerializer.TaggedStringElement("scores", 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.
});
res = LbpSerializer.TaggedStringElement
(
"scores",
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);
}
}

View file

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

View file

@ -9,6 +9,7 @@ namespace LBPUnion.ProjectLighthouse.Logging
public class LighthouseFileLogger : LoggerBase
{
private static readonly string logsDirectory = Path.Combine(Environment.CurrentDirectory, "logs");
public override bool AllowMultiple => false;
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, "all.log"), contentAll);
}
public override bool AllowMultiple => false;
}
}

View file

@ -8,19 +8,19 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="BCrypt.Net-Next" Version="4.0.2" />
<PackageReference Include="Kettu" Version="1.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="5.0.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.11" />
<PackageReference Include="BCrypt.Net-Next" Version="4.0.2"/>
<PackageReference Include="Kettu" Version="1.2.0"/>
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="5.0.11"/>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.11"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.11">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="5.0.2" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="5.0.2"/>
</ItemGroup>
<ItemGroup>
<Compile Remove="Types\SlotXsd.cs" />
<Compile Remove="Types\SlotXsd.cs"/>
</ItemGroup>
</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, Dictionary<string, object> attrKeyValuePairs)
=> $"<{key} " +
Enumerable.Aggregate(attrKeyValuePairs, string.Empty, (current, kvp) => current + $"{kvp.Key}=\"{kvp.Value}\" ") +
$">{value}</{key}>";
=> $"<{key} " + attrKeyValuePairs.Aggregate(string.Empty, (current, kvp) => current + $"{kvp.Key}=\"{kvp.Value}\" ") + $">{value}</{key}>";
public static string Elements
(params KeyValuePair<string, object>[] pairs)

View file

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