Skip to content

Commit 000324a

Browse files
authored
Make Examine API more REST-ish (#13198)
* Make Examine API more REST-ish * Undo bad renaming * Move search endpoint under "searchers" route * Update schema to match new API definition * Update OpenAPI schema after merge * Remove "examine" prefixes and change API route from "examine" to "search" * Update OpenAPI json schema
1 parent e006f7c commit 000324a

18 files changed

+504
-503
lines changed

src/Umbraco.Cms.ManagementApi/Controllers/ExamineManagement/ExamineManagementControllerBase.cs

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

src/Umbraco.Cms.ManagementApi/Controllers/ExamineManagement/IndexesExamineManagementController.cs

Lines changed: 0 additions & 42 deletions
This file was deleted.
Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@
22
using Microsoft.AspNetCore.Http;
33
using Microsoft.AspNetCore.Mvc;
44
using Umbraco.Cms.ManagementApi.Factories;
5-
using Umbraco.Cms.ManagementApi.ViewModels.ExamineManagement;
5+
using Umbraco.Cms.ManagementApi.ViewModels.Search;
66

7-
namespace Umbraco.Cms.ManagementApi.Controllers.ExamineManagement;
7+
namespace Umbraco.Cms.ManagementApi.Controllers.Search;
88

99
[ApiVersion("1.0")]
10-
public class IndexExamineManagementController : ExamineManagementControllerBase
10+
public class IndexDetailsSearchController : SearchControllerBase
1111
{
12-
private readonly IExamineIndexViewModelFactory _examineIndexViewModelFactory;
12+
private readonly IIndexViewModelFactory _indexViewModelFactory;
1313
private readonly IExamineManager _examineManager;
1414

15-
public IndexExamineManagementController(
16-
IExamineIndexViewModelFactory examineIndexViewModelFactory,
15+
public IndexDetailsSearchController(
16+
IIndexViewModelFactory indexViewModelFactory,
1717
IExamineManager examineManager)
1818
{
19-
_examineIndexViewModelFactory = examineIndexViewModelFactory;
19+
_indexViewModelFactory = indexViewModelFactory;
2020
_examineManager = examineManager;
2121
}
2222

@@ -29,15 +29,15 @@ public IndexExamineManagementController(
2929
/// This is kind of rudimentary since there's no way we can know that the index has rebuilt, we
3030
/// have a listener for the index op complete so we'll just check if that key is no longer there in the runtime cache
3131
/// </remarks>
32-
[HttpGet("index")]
32+
[HttpGet("index/{indexName}")]
3333
[MapToApiVersion("1.0")]
3434
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
35-
[ProducesResponseType(typeof(ExamineIndexViewModel), StatusCodes.Status200OK)]
36-
public async Task<ActionResult<ExamineIndexViewModel?>> Index(string indexName)
35+
[ProducesResponseType(typeof(IndexViewModel), StatusCodes.Status200OK)]
36+
public async Task<ActionResult<IndexViewModel?>> Index(string indexName)
3737
{
3838
if (_examineManager.TryGetIndex(indexName, out IIndex? index))
3939
{
40-
return await Task.FromResult(_examineIndexViewModelFactory.Create(index!));
40+
return await Task.FromResult(_indexViewModelFactory.Create(index!));
4141
}
4242

4343
var invalidModelProblem = new ProblemDetails
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using Examine;
2+
using Microsoft.AspNetCore.Http;
3+
using Microsoft.AspNetCore.Mvc;
4+
using Umbraco.Cms.ManagementApi.Factories;
5+
using Umbraco.Cms.ManagementApi.ViewModels.Pagination;
6+
using Umbraco.Cms.ManagementApi.ViewModels.Search;
7+
using Umbraco.Extensions;
8+
9+
namespace Umbraco.Cms.ManagementApi.Controllers.Search;
10+
11+
[ApiVersion("1.0")]
12+
public class IndexListSearchController : SearchControllerBase
13+
{
14+
private readonly IExamineManager _examineManager;
15+
private readonly IIndexViewModelFactory _indexViewModelFactory;
16+
17+
public IndexListSearchController(
18+
IExamineManager examineManager,
19+
IIndexViewModelFactory indexViewModelFactory)
20+
{
21+
_examineManager = examineManager;
22+
_indexViewModelFactory = indexViewModelFactory;
23+
}
24+
25+
/// <summary>
26+
/// Get the details for indexers
27+
/// </summary>
28+
/// <returns></returns>
29+
[HttpGet("index")]
30+
[MapToApiVersion("1.0")]
31+
[ProducesResponseType(typeof(PagedViewModel<IndexViewModel>), StatusCodes.Status200OK)]
32+
public async Task<PagedViewModel<IndexViewModel>> Indexes(int skip, int take)
33+
{
34+
IndexViewModel[] indexes = _examineManager.Indexes
35+
.Select(_indexViewModelFactory.Create)
36+
.OrderBy(indexModel => indexModel.Name.TrimEnd("Indexer")).ToArray();
37+
38+
var viewModel = new PagedViewModel<IndexViewModel> { Items = indexes.Skip(skip).Take(take), Total = indexes.Length };
39+
return viewModel;
40+
}
41+
}
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@
55
using Umbraco.Cms.Infrastructure.Examine;
66
using Umbraco.New.Cms.Infrastructure.Services;
77

8-
namespace Umbraco.Cms.ManagementApi.Controllers.ExamineManagement;
8+
namespace Umbraco.Cms.ManagementApi.Controllers.Search;
99

1010
[ApiVersion("1.0")]
11-
public class RebuildExamineManagementController : ExamineManagementControllerBase
11+
public class IndexRebuildSearchController : SearchControllerBase
1212
{
13-
private readonly ILogger<RebuildExamineManagementController> _logger;
13+
private readonly ILogger<IndexRebuildSearchController> _logger;
1414
private readonly IIndexingRebuilderService _indexingRebuilderService;
1515
private readonly IExamineManager _examineManager;
1616

17-
public RebuildExamineManagementController(
18-
ILogger<RebuildExamineManagementController> logger,
17+
public IndexRebuildSearchController(
18+
ILogger<IndexRebuildSearchController> logger,
1919
IIndexingRebuilderService indexingRebuilderService,
2020
IExamineManager examineManager)
2121
{
@@ -29,7 +29,7 @@ public RebuildExamineManagementController(
2929
/// </summary>
3030
/// <param name="indexName"></param>
3131
/// <returns></returns>
32-
[HttpPost("rebuild")]
32+
[HttpPost("index/{indexName}/rebuild")]
3333
[MapToApiVersion("1.0")]
3434
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
3535
[ProducesResponseType(typeof(OkResult), StatusCodes.Status200OK)]
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using Microsoft.AspNetCore.Mvc;
2+
using NSwag.Annotations;
3+
using Umbraco.New.Cms.Web.Common.Routing;
4+
5+
namespace Umbraco.Cms.ManagementApi.Controllers.Search;
6+
7+
[ApiController]
8+
[VersionedApiBackOfficeRoute("search")]
9+
[OpenApiTag("Search")]
10+
public class SearchControllerBase : ManagementApiControllerBase
11+
{
12+
}
Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
11
using Examine;
22
using Microsoft.AspNetCore.Http;
33
using Microsoft.AspNetCore.Mvc;
4-
using Umbraco.Cms.Infrastructure.Examine;
5-
using Umbraco.Cms.ManagementApi.ViewModels.ExamineManagement;
64
using Umbraco.Cms.ManagementApi.ViewModels.Pagination;
5+
using Umbraco.Cms.ManagementApi.ViewModels.Search;
76
using Umbraco.Extensions;
87

9-
namespace Umbraco.Cms.ManagementApi.Controllers.ExamineManagement;
8+
namespace Umbraco.Cms.ManagementApi.Controllers.Search;
109

1110
[ApiVersion("1.0")]
12-
public class SearchersExamineManagementController : ExamineManagementControllerBase
11+
public class SearcherListSearchController : SearchControllerBase
1312
{
1413
private readonly IExamineManager _examineManager;
1514

16-
public SearchersExamineManagementController(IExamineManager examineManager) => _examineManager = examineManager;
15+
public SearcherListSearchController(IExamineManager examineManager) => _examineManager = examineManager;
1716

1817
/// <summary>
1918
/// Get the details for searchers
2019
/// </summary>
2120
/// <returns></returns>
22-
[HttpGet("searchers")]
21+
[HttpGet("searcher")]
2322
[MapToApiVersion("1.0")]
2423
[ProducesResponseType(typeof(PagedViewModel<SearcherViewModel>), StatusCodes.Status200OK)]
2524
public async Task<ActionResult<PagedViewModel<SearcherViewModel>>> Searchers(int skip, int take)
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,20 @@
44
using Microsoft.AspNetCore.Http;
55
using Microsoft.AspNetCore.Mvc;
66
using Umbraco.Cms.ManagementApi.Services;
7-
using Umbraco.Cms.ManagementApi.ViewModels.ExamineManagement;
87
using Umbraco.Cms.ManagementApi.ViewModels.Pagination;
8+
using Umbraco.Cms.ManagementApi.ViewModels.Search;
99
using Umbraco.Extensions;
1010

11-
namespace Umbraco.Cms.ManagementApi.Controllers.ExamineManagement;
11+
namespace Umbraco.Cms.ManagementApi.Controllers.Search;
1212

1313
[ApiVersion("1.0")]
14-
public class SearchExamineManagementController : ExamineManagementControllerBase
14+
public class SearcherSearchSearchController : SearchControllerBase
1515
{
1616
private readonly IExamineManagerService _examineManagerService;
1717

18-
public SearchExamineManagementController(IExamineManagerService examineManagerService) => _examineManagerService = examineManagerService;
18+
public SearcherSearchSearchController(IExamineManagerService examineManagerService) => _examineManagerService = examineManagerService;
1919

20-
[HttpGet("search")]
20+
[HttpGet("searcher/{searcherName}/search")]
2121
[MapToApiVersion("1.0")]
2222
[ProducesResponseType(typeof(PagedViewModel<PagedViewModel<SearchResultViewModel>>), StatusCodes.Status200OK)]
2323
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77

88
namespace Umbraco.Cms.ManagementApi.DependencyInjection;
99

10-
public static class ExamineManagementBuilderExtensions
10+
public static class SearchManagementBuilderExtensions
1111
{
12-
internal static IUmbracoBuilder AddExamineManagement(this IUmbracoBuilder builder)
12+
internal static IUmbracoBuilder AddSearchManagement(this IUmbracoBuilder builder)
1313
{
1414
// Add examine service
1515
builder.Services.AddTransient<IExamineManagerService, ExamineManagerService>();
@@ -18,7 +18,7 @@ internal static IUmbracoBuilder AddExamineManagement(this IUmbracoBuilder builde
1818
// Add factories
1919
builder.Services.AddTransient<IIndexDiagnosticsFactory, IndexDiagnosticsFactory>();
2020
builder.Services.AddTransient<IIndexRebuilder, ExamineIndexRebuilder>();
21-
builder.Services.AddTransient<IExamineIndexViewModelFactory, ExamineIndexViewModelFactory>();
21+
builder.Services.AddTransient<IIndexViewModelFactory, IndexViewModelFactory>();
2222
return builder;
2323
}
2424
}

src/Umbraco.Cms.ManagementApi/Factories/IExamineIndexViewModelFactory.cs

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

0 commit comments

Comments
 (0)