using Microsoft.AspNetCore.Mvc; namespace zero.Api.Endpoints.Pages; public class PagesController : ZeroApiTreeEntityStoreController { IPageTypeService PageTypeService; IRoutes Routes; public PagesController(IPagesStore store, IPageTypeService pageTypeService, IRoutes routes) : base(store) { PageTypeService = pageTypeService; Routes = routes; } [HttpGet("empty")] [ZeroAuthorize(PagePermissions.Create)] public virtual async Task> Empty(string flavor, string parentId = null) { Page page = await Store.Empty(flavor, parentId); if (page == null) { return NotFound(); } if (!await Store.IsAllowedAsChild(page, parentId)) { return BadRequest(Result.Fail("@errors.childnotallowed")); } return page; } [HttpGet("{id}/flavors")] [ZeroAuthorize(PagePermissions.Read)] public async Task>> GetAllowedFlavors(string id) => Ok(await PageTypeService.GetAllowedTypes(NormalizeParentId(id))); [HttpGet("{id}")] [ZeroAuthorize(PagePermissions.Read)] public virtual Task> Get(string id, string changeVector = null) => GetModel(id, changeVector); [HttpGet("{id}/children")] [ZeroAuthorize(PagePermissions.Read)] public virtual async Task> GetChildren(string id, [FromQuery] ListQuery query) { query.SearchFor(x => x.Name); query.OrderQuery = q => q.OrderByDescending(x => x.Sort).ThenByDescending(x => x.CreatedDate); Paged result = await Store.LoadChildren(id, query.Page, query.PageSize, q => q.Filter(query)); return result; } [HttpGet("")] [ZeroAuthorize(PagePermissions.Read)] public virtual Task> Get([FromQuery] ListQuery query) { query.SearchFor(x => x.Name); query.OrderQuery = q => q.OrderByDescending(x => x.Sort).ThenByDescending(x => x.CreatedDate); return GetModelsByIndex(query); } [HttpPost("")] [ZeroAuthorize(PagePermissions.Create)] public virtual Task> Create(Page saveModel) => CreateModel(saveModel); [HttpPut("{id}")] [ZeroAuthorize(PagePermissions.Update)] public virtual Task> Update(string id, Page updateModel, [FromQuery] string changeToken = null) => UpdateModel(id, updateModel, changeToken); [HttpDelete("{id}")] [ZeroAuthorize(PagePermissions.Delete)] public virtual Task>> Delete(string id) => DeleteModelWithDescendants(id); [HttpPut("{id}/move/{destinationId}")] [ZeroAuthorize(PagePermissions.Update)] public virtual Task> Move(string id, string destinationId) => MoveModel(id, NormalizeParentId(destinationId)); [HttpPut("{id}/copy/{destinationId}")] [ZeroAuthorize(PagePermissions.Update)] public virtual Task> Copy(string id, string destinationId, [FromQuery] bool includeDescendants = false) { destinationId = NormalizeParentId(destinationId); return includeDescendants ? CopyModelWithDescendants(id, destinationId) : CopyModel(id, destinationId); } [HttpPut("sort")] [ZeroAuthorize(PagePermissions.Update)] public virtual Task> Sort([FromBody] string[] ids) => SortModels(ids); }