Make LBP2 lucky dip prefer newer levels and make player count more accurate (#744)

* Lucky Dip, Newest Levels, & Recently Played change

* almost broke prod :disaster:

* Update ProjectLighthouse.Servers.GameServer/Controllers/Slots/SlotsController.cs

I forgor lol

Co-authored-by: koko <koko@drones.gay>

* Remove TimestampMicros and add random slot selection with bias

* playersInPod count filters by platform

* Hope this actually commits now, idk github

* Apply suggestions from code review

Co-authored-by: Josh <josh@slendy.pw>

* Update ProjectLighthouse.Servers.GameServer/Controllers/StatisticsController.cs

Co-authored-by: Josh <josh@slendy.pw>

* Fix random bias ordering

---------

Co-authored-by: koko <joebiden@kitgaming67.com>
Co-authored-by: koko <koko@drones.gay>
Co-authored-by: Slendy <josh@slendy.pw>
This commit is contained in:
W0lf4llo 2023-04-29 00:32:36 -04:00 committed by GitHub
parent d5f3db9201
commit aefecc7b12
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 7 additions and 5 deletions

View file

@ -1,5 +1,4 @@
#nullable enable
using System.Security.Cryptography;
using LBPUnion.ProjectLighthouse.Configuration;
using LBPUnion.ProjectLighthouse.Database;
using LBPUnion.ProjectLighthouse.Extensions;
@ -146,7 +145,7 @@ public class SlotsController : ControllerBase
{
if (page != null) pageStart = (int)page * 30;
// bit of a better placeholder until we can track average user interaction with /stream endpoint
return await this.ThumbsSlots(pageStart, Math.Min(pageSize, 30), gameFilterType, players, move, "thisWeek");
return await this.ThumbsSlots(pageStart, Math.Min(pageSize, 30), gameFilterType, players, move, "thisMonth");
}
[HttpGet("slots")]
@ -160,6 +159,7 @@ public class SlotsController : ControllerBase
List<SlotBase> slots = (await this.database.Slots.ByGameVersion(gameVersion, false, true)
.OrderByDescending(s => s.FirstUploaded)
.ThenByDescending(s => s.SlotId)
.Skip(Math.Max(0, pageStart - 1))
.Take(Math.Min(pageSize, 30))
.ToListAsync()).ToSerializableList(s => SlotBase.CreateFromEntity(s, token));
@ -284,8 +284,9 @@ public class SlotsController : ControllerBase
GameVersion gameVersion = token.GameVersion;
const double biasFactor = .8f;
List<SlotBase> slots = (await this.database.Slots.ByGameVersion(gameVersion, false, true)
.OrderBy(_ => EF.Functions.Random())
.OrderByDescending(s => EF.Functions.Random() * (s.FirstUploaded * biasFactor))
.Take(Math.Min(pageSize, 30))
.ToListAsync()).ToSerializableList(s => SlotBase.CreateFromEntity(s, token));