mirror of
https://github.com/LBPUnion/ProjectLighthouse.git
synced 2025-07-13 00:31:28 +00:00
Rewrite gameserver slot filter system (#763)
* Initial implementation of new slot sorting and filtering system * Initial implementation of filtering for lbp3 community tab * Add support for organization on lbp3 * Add playlist and user categories * Implement unit tests for all filters Refactor more systems to use PaginationData * Fix PlayerCountFilter test * Add more unit tests and integration tests for the filter system * Fix LBP2 move filter and gameFilterType * Fix sort by likes in LBP3 category * Add sort for total plays * Remove extra whitespace and make styling more consistent * Order hearted and queued levels by primary key ID * Fix query without order warnings
This commit is contained in:
parent
de228cb242
commit
0c1e350fa3
106 changed files with 4040 additions and 1183 deletions
|
@ -0,0 +1,59 @@
|
|||
using System.Linq.Expressions;
|
||||
using LBPUnion.ProjectLighthouse.Database;
|
||||
using LBPUnion.ProjectLighthouse.Extensions;
|
||||
using LBPUnion.ProjectLighthouse.Filter;
|
||||
using LBPUnion.ProjectLighthouse.Types.Entities.Level;
|
||||
using LBPUnion.ProjectLighthouse.Types.Entities.Token;
|
||||
using LBPUnion.ProjectLighthouse.Types.Filter;
|
||||
using LBPUnion.ProjectLighthouse.Types.Filter.Sorts;
|
||||
using LBPUnion.ProjectLighthouse.Types.Misc;
|
||||
using LBPUnion.ProjectLighthouse.Types.Serialization;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace LBPUnion.ProjectLighthouse.Servers.GameServer.Extensions;
|
||||
|
||||
public static class DatabaseContextExtensions
|
||||
{
|
||||
public static async Task<List<SlotBase>> GetSlots
|
||||
(
|
||||
this IQueryable<SlotEntity> queryable,
|
||||
GameTokenEntity token,
|
||||
SlotQueryBuilder queryBuilder,
|
||||
PaginationData pageData,
|
||||
ISortBuilder<SlotEntity> sortBuilder
|
||||
) =>
|
||||
(await queryable.Where(queryBuilder.Build())
|
||||
.ApplyOrdering(sortBuilder)
|
||||
.ApplyPagination(pageData)
|
||||
.ToListAsync()).ToSerializableList(s => SlotBase.CreateFromEntity(s, token));
|
||||
|
||||
public static async Task<List<SlotBase>> GetSlots
|
||||
(
|
||||
this DatabaseContext database,
|
||||
GameTokenEntity token,
|
||||
SlotQueryBuilder queryBuilder,
|
||||
PaginationData pageData,
|
||||
ISortBuilder<SlotEntity> sortBuilder
|
||||
) =>
|
||||
(await database.Slots.Where(queryBuilder.Build())
|
||||
.ApplyOrdering(sortBuilder)
|
||||
.ApplyPagination(pageData)
|
||||
.ToListAsync()).ToSerializableList(s => SlotBase.CreateFromEntity(s, token));
|
||||
|
||||
public static async Task<List<SlotBase>> GetSlots
|
||||
(
|
||||
this DatabaseContext database,
|
||||
GameTokenEntity token,
|
||||
SlotQueryBuilder queryBuilder,
|
||||
PaginationData pageData,
|
||||
ISortBuilder<SlotMetadata> sortBuilder,
|
||||
Expression<Func<SlotEntity, SlotMetadata>> selectorFunction
|
||||
) =>
|
||||
(await database.Slots.Where(queryBuilder.Build())
|
||||
.AsQueryable()
|
||||
.Select(selectorFunction)
|
||||
.ApplyOrdering(sortBuilder)
|
||||
.Select(s => s.Slot)
|
||||
.ApplyPagination(pageData)
|
||||
.ToListAsync()).ToSerializableList(s => SlotBase.CreateFromEntity(s, token));
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue