using Microsoft.AspNetCore.Mvc; using Raven.Client.Documents.Linq; using System; using System.Collections.Generic; using System.Threading.Tasks; using zero.Core; using zero.Core.Entities; namespace zero.Backoffice; public abstract class _ZeroBackofficeCollectionController : ZeroBackofficeController where TEntity : ZeroIdEntity, new() where TCollection : IStoreOperations { protected TCollection Collection { get; private set; } [Obsolete] protected Func, IRavenQueryable> DefaultQuery { get; set; } protected Action PreviewTransform { get; set; } protected Action PickerTransform { get; set; } public ZeroBackofficeCollectionController(TCollection collection) { Collection = collection; } public override void OnScopeChanged(string scope) { //Collection.ApplyScope(scope); } public virtual async Task> GetById([FromQuery] string id, [FromQuery] string changeVector = null) => Edit(await Collection.Load(id, changeVector)); public virtual async Task> GetByIds([FromQuery] string[] ids) => await Collection.Load(ids); public virtual async Task> GetEmpty() => Edit(await Collection.Empty()); public virtual async Task> GetByQuery([FromQuery] ListQuery query) { return await Collection.Load(query); } public virtual async Task> GetRevisions([FromQuery] string id, [FromQuery] ListQuery query) { return null; // TODO //return await Collection.GetRevisions(id, query.Page, query.PageSize); } public virtual async Task> GetForPicker() => await SelectList(Collection.Stream(), PickerTransform); public virtual async Task> GetPreviews([FromQuery] List ids) => Previews(await Collection.Load(ids), PreviewTransform); [HttpPost] public virtual async Task> Save([FromBody] TEntity model) => await Collection.Save(model); [HttpDelete] public virtual async Task> Delete([FromQuery] string id) => await Collection.Delete(id); }