using Microsoft.AspNetCore.Mvc; using System.Collections; namespace zero.Api.Endpoints.Spaces; public class SpacesController : ZeroApiEntityStoreController { ISpaceTypeService SpaceTypes; public SpacesController(ISpaceStore store, ISpaceTypeService spaceTypes) : base(store) { SpaceTypes = spaceTypes; } [HttpGet("types")] [ZeroAuthorize(SpacePermissions.Read)] public virtual ActionResult GetTypes() => Ok(SpaceTypes.GetAll()); [HttpGet("types/{alias}")] [ZeroAuthorize(SpacePermissions.Read)] public virtual ActionResult GetType(string alias) => Ok(SpaceTypes.GetByAlias(alias)); [HttpGet("{alias}")] [ZeroAuthorize(SpacePermissions.Read)] public virtual async Task> Get(string alias, [FromQuery] ListQuery query = null) { SpaceType space = SpaceTypes.GetByAlias(alias); if (space == null) { return NotFound(); } if (space.View != SpaceView.Editor) { query.OrderQuery ??= q => q.OrderByDescending(x => x.CreatedDate); query.SearchSelector ??= x => x.Name; Paged result = await Store.Load(query.Page, query.PageSize, q => q.Where(x => x.Flavor == alias).Filter(query)); return result; } var stream = Store.Stream(q => q.Where(x => x.Flavor == alias)); Space item = await stream.FirstOrDefaultAsync(); return item; } [HttpGet("{alias}/empty")] [ZeroAuthorize(SpacePermissions.Create)] public virtual Task> Empty(string alias) => EmptyModel(alias); [HttpGet("{alias}/{id}")] [ZeroAuthorize(SpacePermissions.Read)] public virtual Task> Get(string alias, string id, string changeVector = null) => GetModel(id, changeVector); [HttpPost("")] [ZeroAuthorize(SpacePermissions.Create)] public virtual Task> Create([FromBody] Space saveModel) => CreateModel(saveModel); [HttpPut("{id}")] [ZeroAuthorize(SpacePermissions.Update)] public virtual Task> Update(string id, [FromBody] Space updateModel, [FromQuery] string changeToken = null) => UpdateModel(id, updateModel, changeToken); [HttpDelete("{id}")] [ZeroAuthorize(SpacePermissions.Delete)] public virtual Task> Delete(string id) => DeleteModel(id); }