Files
mixtape/zero.Backoffice/Endpoints/Pages/PagesController.cs
T

85 lines
2.4 KiB
C#
Raw Normal View History

2021-12-20 13:03:56 +01:00
using Microsoft.AspNetCore.Mvc;
2022-01-12 14:11:41 +01:00
using Raven.Client.Documents;
2021-12-20 13:03:56 +01:00
using zero.Api.Models;
namespace zero.Backoffice.Endpoints.Pages;
public class PagesController : ZeroBackofficeController
{
2022-01-12 14:11:41 +01:00
readonly IPagesStore Store;
2021-12-20 13:03:56 +01:00
readonly IPageTreeService PageTreeService;
2022-01-12 23:52:37 +01:00
readonly IPageTypeService PageTypeService;
readonly IRoutes Routes;
2021-12-20 13:03:56 +01:00
2022-01-12 23:52:37 +01:00
public PagesController(IPagesStore store, IPageTreeService pageTreeService, IPageTypeService pageTypeService, IRoutes routes)
2021-12-20 13:03:56 +01:00
{
2022-01-12 14:11:41 +01:00
Store = store;
2021-12-20 13:03:56 +01:00
PageTreeService = pageTreeService;
2022-01-12 23:52:37 +01:00
PageTypeService = pageTypeService;
Routes = routes;
2021-12-20 13:03:56 +01:00
}
[HttpGet("{parentId}/children")]
public async Task<ActionResult<List<TreeItem>>> GetChildren(string parentId = null, string activeId = null, string search = null)
{
return await PageTreeService.GetChildren(parentId, activeId, search);
}
2022-01-12 14:11:41 +01:00
[HttpGet("{parentId}/dependencies")]
//[ZeroAuthorize(MediaPermissions.Update)]
public virtual async Task<ActionResult<dynamic>> GetDependencies(string parentId)
{
int descendantCount = await Store.Session.Query<zero_Pages_ByHierarchy.Result, zero_Pages_ByHierarchy>()
.ProjectInto<zero_Pages_ByHierarchy.Result>()
.CountAsync(x => x.PathIds.Contains(parentId));
return new
{
pages = descendantCount + 1
};
}
2022-01-12 23:52:37 +01:00
[HttpGet("previews")]
public async Task<ActionResult<List<LinkPreview>>> GetPreviews([FromQuery] List<string> ids)
{
IEnumerable<FlavorConfig> pageTypes = PageTypeService.GetAll();
Dictionary<string, Page> pages = await Store.Load(ids.ToArray());
Dictionary<Page, Route> routes = await Routes.GetRoutes(pages.Where(x => x.Value != null).Select(x => x.Value).ToArray());
List<LinkPreview> previews = new();
foreach ((string id, Page page) in pages)
{
if (page != null)
{
routes.TryGetValue(page, out Route route);
FlavorConfig pageType = PageTypeService.GetByAlias(page.Flavor);
previews.Add(new()
{
Name = page.Name,
Text = route?.Url.Or("@page.picker.urlnotfound"),
Id = page.Id,
Icon = pageType?.Icon.Or("fth-folder")
});
}
else
{
previews.Add(new()
{
HasError = true,
Icon = "fth-alert-circle color-red",
Id = "tmp_" + IdGenerator.Create(),
Name = "@errors.preview.notfound",
Text = "@errors.preview.notfound_text"
});
}
}
return previews;
}
2021-12-20 13:03:56 +01:00
}