2024-10-10 17:13:39 +02:00

148 lines
3.7 KiB
C#

// See https://aka.ms/new-console-template for more information
using System.Runtime.InteropServices;
using AutoMapper;
using AutoMapper.QueryableExtensions;
using Baguette.Querying;
using Microsoft.Extensions.DependencyInjection;
using Test;
var services = new ServiceCollection();
services.AddQueryProfiles(typeof(Model));
services.AddAutoMapper(typeof(Model));
var provider = services.BuildServiceProvider();
var processor = provider.GetRequiredService<IQueryProcessor>();
var mapper = provider.GetRequiredService<IMapper>();
var list = new[]
{
new Model
{
FirstName = "Jens",
LastName = "De Craecker",
BirthDate = new DateOnly(1998, 6, 30),
Nested = new NestedModel
{
FirstName = "Jens",
LastName = "De Craecker",
BirthDate = new DateOnly(1998, 6, 30),
NestedInNested = new NestedNestedModel
{
Text = "Hello World!"
}
},
Nested2 = new NestedModel
{
FirstName = "Jens",
LastName = "De Craecker",
BirthDate = new DateOnly(1998, 6, 30),
NestedInNested = new NestedNestedModel
{
Text = "Hello World!"
}
}
}
};
var filters = new ModelFilters()
{
// FirstName = "Jens",
// Sorting = new[]
// {
// new SortingOptions()
// {
// SortBy = "LastName"
// }
// }
Search = "Jens"
};
var query = list.AsQueryable().ApplyFilters(processor, filters).ProjectTo<ResponseModel>(mapper.ConfigurationProvider);
var result = query.ToList();
//
// var json = JsonSerializer.Serialize(filters, typeof(ModelFilters));
//
// var filters2 = JsonSerializer.Deserialize<ModelFilters>(json);
//
// var result = list.AsQueryable().ApplyFilters(processor, filters).ToList();
//
// var pipelineProvider = provider.GetRequiredService<IQueryPipelineProvider>();
//
// var result2 = list.AsQueryable().Where(pipelineProvider.GetPredicate<ModelFilters, Model>(filters)).ToList();
return;
class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<Model, ResponseModel>();
}
}
public record ResponseModel(string FirstName, string LastName);
[GenerateFilters(IncludeSorting = true, IncludePaging = true)]
public record Model
{
[FilterMode(FilterMode.Contains)]
[Searchable]
public required string FirstName { get; init; }
[SortAlias("Surname")]
[SortAlias("")]
[Searchable]
public required string LastName { get; init; }
public required DateOnly BirthDate { get; init; }
[FilterMode(FilterMode.InList)]
public TestEnum TestEnum { get; init; }
[SortAlias("NestedAlias")]
[SortAlias("")]
[Searchable]
public required NestedModel Nested { get; init; }
public required NestedModel Nested2 { get; init; }
}
[StructLayout(LayoutKind.Auto)]
public readonly partial record struct ModelFilters { }
namespace Test
{
public enum TestEnum
{
Hello
}
[GenerateNestedFilters]
public record NestedModel
{
[FilterMode(FilterMode.Contains)]
[FilterName("HelloWorld")]
public required string FirstName { get; init; }
[Searchable]
public required string LastName { get; init; }
public required DateOnly BirthDate { get; init; }
[FilterMode(FilterMode.InList)]
public TestEnum TestEnum { get; init; }
[SortAlias("NestedNestedAlias")]
public required NestedNestedModel NestedInNested { get; init; }
}
[GenerateNestedFilters]
public record NestedNestedModel
{
[SortAlias("TextAlias")]
public required string Text { get; init; }
}
}