mirror of
https://github.com/LBPUnion/ProjectLighthouse.git
synced 2025-06-19 14:01:27 +00:00
* 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
59 lines
No EOL
2.2 KiB
C#
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));
|
|
} |