Files
mixtape/zero.Core/Database/Indexes/Media_ByChildren.cs
T
2021-08-27 11:46:50 +02:00

50 lines
1.2 KiB
C#

using Raven.Client.Documents.Indexes;
using System.Linq;
using zero.Core.Entities;
namespace zero.Core.Database.Indexes
{
public class Media_ByChildren : ZeroMultiMapIndex<Media_ByChildren.Result>
{
public class Result : ZeroIdEntity, IZeroDbConventions
{
public string ParentId { get; set; }
public int ChildrenCount { get; set; }
public string[] ChildrenIds { get; set; }
}
protected override void Create()
{
AddMap<Media>(items => items.Select(item => new Result()
{
Id = item.Id,
ParentId = item.FolderId,
ChildrenCount = 1,
ChildrenIds = new string[] { }
}));
AddMap<MediaFolder>(items => items.Select(item => new Result()
{
Id = item.Id,
ParentId = item.ParentId,
ChildrenCount = 1,
ChildrenIds = new string[] { }
}));
Reduce = results => results.GroupBy(x => new { x.ParentId }).Select(group => new Result()
{
Id = null,
ParentId = group.Key.ParentId,
ChildrenCount = group.Sum(x => x.ChildrenCount),
ChildrenIds = group.Select(x => x.Id).ToArray()
});
StoreAllFields(FieldStorage.Yes);
Index(x => x.ParentId, FieldIndexing.Exact);
}
}
}