ProjectLighthouse/ProjectLighthouse.Servers.GameServer/Extensions/DatabaseContextExtensions.cs
Josh 0c1e350fa3
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
2023-05-31 21:33:39 +00:00

59 lines
No EOL
2.2 KiB
C#

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));
}