51 lines
1.7 KiB
C#
51 lines
1.7 KiB
C#
using MongoDB.Bson;
|
|
using MongoDB.Driver;
|
|
using System.Linq.Expressions;
|
|
using UGQDataAccess.Repository.Models;
|
|
using UGQDatabase.Models;
|
|
|
|
|
|
public static class ReserveAccountGradeQuery
|
|
{
|
|
|
|
public class AllReserveAccountGradeQueryJoin : ReserveAccountGradeEntity
|
|
{
|
|
public IEnumerable<AccountEntity> Accounts { get; set; } = null!;
|
|
}
|
|
|
|
|
|
public static Expression<Func<AllReserveAccountGradeQueryJoin, ReserveAccountGradeItemResult>> ReserveAccountGradeItemResultProjection =
|
|
x => new ReserveAccountGradeItemResult
|
|
{
|
|
ReserveId = x.Id.ToString(),
|
|
UserGuid = x.UserGuid,
|
|
CurrentGradeType = x.BeforeGradeType,
|
|
AccountId = x.Accounts.First().AccountId ?? string.Empty,
|
|
ReserveGradeType = x.ReserveGradeType,
|
|
ReserveTime = x.ReserveTime,
|
|
UpdatedAt = x.UpdatedAt,
|
|
IsCompleted = x.IsCompleted,
|
|
};
|
|
|
|
public static PipelineDefinition<ReserveAccountGradeEntity, T> allReserveAccountGradePipeline<T>(
|
|
FilterDefinition<ReserveAccountGradeEntity> filter,
|
|
Expression<Func<AllReserveAccountGradeQueryJoin, T>> projection)
|
|
{
|
|
var lookupStage1 = new BsonDocument("$lookup",
|
|
new BsonDocument
|
|
{
|
|
{ "from", "Account" },
|
|
{ "localField", "UserGuid" },
|
|
{ "foreignField", "UserGuid" },
|
|
{ "as", "Accounts" }
|
|
});
|
|
|
|
var pipeline = new EmptyPipelineDefinition<ReserveAccountGradeEntity>()
|
|
.Match(filter)
|
|
.AppendStage<ReserveAccountGradeEntity, ReserveAccountGradeEntity, AllReserveAccountGradeQueryJoin>(lookupStage1)
|
|
.Project(projection);
|
|
|
|
return pipeline;
|
|
}
|
|
|
|
} |