Skip to content

Commit c07ecfe

Browse files
committed
refactor: abstract controller logic
1 parent c06d497 commit c07ecfe

File tree

7 files changed

+78
-149
lines changed

7 files changed

+78
-149
lines changed

src/Umbraco.Community.SimpleTrees.TestSite/packages.lock.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,8 @@
181181
},
182182
"jcdcdev.Umbraco.Core": {
183183
"type": "Transitive",
184-
"resolved": "16.0.1",
185-
"contentHash": "Bw1MR604hi623BdRsoVnd6SE6d886WNSnHy5Yb8TlLyXj5PumAclJCdOD7054OA6vQGKVYK7LhiERSFIDHm6yQ==",
184+
"resolved": "16.1.0",
185+
"contentHash": "zGLyOd4mMnVi9xfvzH4ITqqmbkc8wvdfiMp8hxPgkI8qLbIXkjaqApCi0yZXDeZg65YNiF12GeHnvrHbdihadQ==",
186186
"dependencies": {
187187
"Umbraco.Cms.Web.Common": "[16.0.0, 17.0.0)"
188188
}
@@ -2968,7 +2968,7 @@
29682968
"Umbraco.Cms.Api.Common": "[16.0.0, 17.0.0)",
29692969
"Umbraco.Cms.Api.Management": "[16.0.0, 17.0.0)",
29702970
"Umbraco.Cms.Web.Website": "[16.0.0, 17.0.0)",
2971-
"jcdcdev.Umbraco.Core": "[16.0.1, 17.0.0)"
2971+
"jcdcdev.Umbraco.Core": "[16.1.0, 17.0.0)"
29722972
}
29732973
}
29742974
}

src/Umbraco.Community.SimpleTrees/Umbraco.Community.SimpleTrees.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
<PackageReference Include="Umbraco.Cms.Api.Common" Version="[16.0.0,17.0.0)"/>
2727
<PackageReference Include="Umbraco.Cms.Api.Management" Version="[16.0.0,17.0.0)"/>
2828
<PackageReference Include="Umbraco.Cms.Web.Website" Version="[16.0.0,17.0.0)"/>
29-
<PackageReference Include="jcdcdev.Umbraco.Core" Version="[16.0.1,17.0.0)"/>
29+
<PackageReference Include="jcdcdev.Umbraco.Core" Version="[16.1.0,17.0.0)"/>
3030
</ItemGroup>
3131

3232
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">

src/Umbraco.Community.SimpleTrees/Web/Controllers/SimpleTreesController.cs

Lines changed: 0 additions & 124 deletions
This file was deleted.
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
using jcdcdev.Umbraco.Core.Extensions;
2+
using Microsoft.AspNetCore.Authorization;
3+
using Microsoft.AspNetCore.Mvc;
4+
using Microsoft.AspNetCore.Mvc.ViewEngines;
5+
using Microsoft.Extensions.Logging;
6+
using Umbraco.Cms.Api.Common.Attributes;
7+
using Umbraco.Cms.Api.Common.Filters;
8+
using Umbraco.Cms.Api.Management.Filters;
9+
using Umbraco.Cms.Web.Common.Authorization;
10+
using Umbraco.Community.SimpleTrees.Web.Models;
11+
12+
namespace Umbraco.Community.SimpleTrees.Web.Controllers;
13+
14+
[ApiExplorerSettings(GroupName = Constants.Api.GroupName)]
15+
[SimpleTreesVersionedRoute("tree")]
16+
[MapToApi(Constants.Api.ApiName)]
17+
[JsonOptionsName(Cms.Core.Constants.JsonOptionsNames.BackOffice)]
18+
[ApiController]
19+
[Authorize(Policy = AuthorizationPolicies.BackOfficeAccess)]
20+
[AppendEventMessages]
21+
[Produces("application/json")]
22+
public class SimpleTreesRenderController(ICompositeViewEngine viewEngine, ILogger<SimpleTreesRenderController> logger) : Controller
23+
{
24+
[HttpGet("render")]
25+
[Produces<SimpleTreeRenderModel>]
26+
public async Task<IActionResult> Render(string unique, string entityType)
27+
{
28+
var model = new SimpleTreeViewModel(unique, entityType);
29+
var path = model.ViewPath;
30+
var result = viewEngine.GetView(null, path, false);
31+
if (result.Success)
32+
{
33+
logger.LogDebug("Rendering view {ViewPath} for unique {Unique} and entity type {EntityType}", path, unique, entityType);
34+
var partialViewResult = await this.RenderViewResultToStringAsync(result, model);
35+
return Ok(SimpleTreeRenderModel.Create(partialViewResult));
36+
}
37+
38+
var viewComponentName = model.ViewComponent;
39+
if (!this.ViewComponentExists(viewComponentName))
40+
{
41+
logger.LogDebug("ViewComponent {ViewComponent} not found", viewComponentName);
42+
return await ReturnError(model);
43+
}
44+
45+
var viewComponentResult = await this.RenderViewComponentToStringAsync(viewComponentName, model);
46+
logger.LogDebug("ViewComponent {ViewComponent} result for unique {Unique} and entity type {EntityType} {Body}", viewComponentName, unique, entityType, viewComponentResult);
47+
return Ok(SimpleTreeRenderModel.Create(viewComponentResult));
48+
}
49+
50+
private async Task<IActionResult> ReturnError(SimpleTreeViewModel viewModel)
51+
{
52+
var errorViewResult = viewEngine.GetView(null, Constants.ErrorViewPath, false);
53+
if (errorViewResult.Success)
54+
{
55+
var body = await this.RenderViewResultToStringAsync(errorViewResult, viewModel);
56+
return Ok(SimpleTreeRenderModel.Create(body));
57+
}
58+
59+
return Ok(SimpleTreeRenderModel.Error);
60+
}
61+
}

src/Umbraco.Community.SimpleTrees/Web/Models/SimpleTreeRenderModel.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,14 @@ public class SimpleTreeRenderModel
44
{
55
public required string Body { get; set; }
66
public static SimpleTreeRenderModel Error => new() { Body = Constants.ErrorView };
7+
8+
public static SimpleTreeRenderModel Create(string body)
9+
{
10+
if (string.IsNullOrWhiteSpace(body))
11+
{
12+
throw new ArgumentException("Body cannot be null or whitespace.", nameof(body));
13+
}
14+
15+
return new SimpleTreeRenderModel { Body = body };
16+
}
717
}

src/Umbraco.Community.SimpleTrees/Web/NullView.cs

Lines changed: 0 additions & 18 deletions
This file was deleted.

src/Umbraco.Community.SimpleTrees/packages.lock.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
"net9.0": {
55
"jcdcdev.Umbraco.Core": {
66
"type": "Direct",
7-
"requested": "[16.0.1, 17.0.0)",
8-
"resolved": "16.0.1",
9-
"contentHash": "Bw1MR604hi623BdRsoVnd6SE6d886WNSnHy5Yb8TlLyXj5PumAclJCdOD7054OA6vQGKVYK7LhiERSFIDHm6yQ==",
7+
"requested": "[16.1.0, 17.0.0)",
8+
"resolved": "16.1.0",
9+
"contentHash": "zGLyOd4mMnVi9xfvzH4ITqqmbkc8wvdfiMp8hxPgkI8qLbIXkjaqApCi0yZXDeZg65YNiF12GeHnvrHbdihadQ==",
1010
"dependencies": {
1111
"Umbraco.Cms.Web.Common": "[16.0.0, 17.0.0)"
1212
}

0 commit comments

Comments
 (0)