namespace zero.Core; using Raven.Client.Documents.Indexes; using Raven.Client.Documents.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using zero.Core.Entities; using zero.Core.Extensions; public abstract partial class EntityCollection { /// public virtual async Task Load(string id, string changeVector = null) { if (id.IsNullOrWhiteSpace()) { return default; } if (!changeVector.IsNullOrEmpty()) { //return WhenActive(await GetRevision(changeVector)); // TODO } return WhenActive(await Session.LoadAsync(id)); } /// public virtual async Task> Load(IEnumerable ids) { ids = ids.Distinct().ToArray(); Dictionary models = await Session.LoadAsync(ids); Dictionary result = new(); foreach (string id in ids) { models.TryGetValue(id, out T model); result.Add(id, WhenActive(model)); } return result; } /// public virtual async Task> Load(ListQuery query) { return await Session.Query().ToQueriedListAsyncX(query); // TODO whenActive + AsyncX update for ZeroEntity } /// public virtual async Task> Load(ListQuery query) where TIndex : AbstractCommonApiForIndexes, new() { return await Session.Query().ToQueriedListAsyncX(query); } /// public virtual async Task> LoadAll() { List items = new(); await foreach (T item in Stream()) { items.Add(item); } return items; } /// public virtual IAsyncEnumerable Stream() => Stream(null); /// public virtual async IAsyncEnumerable Stream(Func, IRavenQueryable> expression) { IRavenQueryable query = Session.Query(); if (expression != null) { query = expression(query); } var stream = await Session.Advanced.StreamAsync(query); while (await stream.MoveNextAsync()) { if (WhenActive(stream.Current.Document) == default) { continue; } yield return stream.Current.Document; } } }