From 20534b7a970171deec5b7444afd03f819c6a92db Mon Sep 17 00:00:00 2001 From: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com> Date: Wed, 8 Feb 2023 14:16:21 +0100 Subject: [PATCH] New Backoffice: Health check controller refactor (#13763) * Refactor AllHealthCheckGroupController to return just the names of the groups + changes in the HealthCheckFactory * Introduce a new "get by name without results" endpoint * Create a "check" endpoint * View models changes * Factory renaming changes * Remove Task.FromResult * Update OpenApi.json * Minor updates * Inject HealthCheckCollection directly into the factory --- .../ExecuteActionHealthCheckController.cs | 2 +- .../Group/AllHealthCheckGroupController.cs | 24 +++--- .../Group/ByNameHealthCheckGroupController.cs | 46 +++++++++++ ...ameWithResultHealthCheckGroupController.cs | 47 ----------- .../Group/CheckHealthCheckGroupController.cs | 40 +++++++++ .../HealthCheckBuilderExtensions.cs | 6 +- ...cs => HealthCheckGroupViewModelFactory.cs} | 20 ++--- ...s => IHealthCheckGroupViewModelFactory.cs} | 4 +- .../ManagementApiComposer.cs | 2 +- .../HealthCheckViewModelsMapDefinition.cs | 30 +++++-- src/Umbraco.Cms.Api.Management/OpenApi.json | 81 ++++++++++++++----- .../HealthCheck/HealthCheckGroupModelBase.cs | 9 +++ .../HealthCheck/HealthCheckGroupViewModel.cs | 7 +- .../HealthCheckGroupWithResultViewModel.cs | 5 -- .../HealthCheck/HealthCheckModelBase.cs | 9 +++ .../HealthCheck/HealthCheckViewModel.cs | 7 +- .../HealthCheckWithResultViewModel.cs | 2 +- 17 files changed, 218 insertions(+), 123 deletions(-) create mode 100644 src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/ByNameHealthCheckGroupController.cs delete mode 100644 src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/ByNameWithResultHealthCheckGroupController.cs create mode 100644 src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/CheckHealthCheckGroupController.cs rename src/Umbraco.Cms.Api.Management/Factories/{HealthCheckGroupWithResultViewModelFactory.cs => HealthCheckGroupViewModelFactory.cs} (75%) rename src/Umbraco.Cms.Api.Management/Factories/{IHealthCheckGroupWithResultViewModelFactory.cs => IHealthCheckGroupViewModelFactory.cs} (78%) create mode 100644 src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckGroupModelBase.cs create mode 100644 src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckModelBase.cs diff --git a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/ExecuteActionHealthCheckController.cs b/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/ExecuteActionHealthCheckController.cs index bdfef7dc39..edd2fa71bb 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/ExecuteActionHealthCheckController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/ExecuteActionHealthCheckController.cs @@ -54,7 +54,7 @@ public class ExecuteActionHealthCheckController : HealthCheckControllerBase Type = "Error", }; - return await Task.FromResult(BadRequest(invalidModelProblem)); + return BadRequest(invalidModelProblem); } HealthCheckStatus result = healthCheck.ExecuteAction(_umbracoMapper.Map(action)!); diff --git a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/AllHealthCheckGroupController.cs b/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/AllHealthCheckGroupController.cs index a4f8d91c4c..1fce39234f 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/AllHealthCheckGroupController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/AllHealthCheckGroupController.cs @@ -3,43 +3,39 @@ using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Api.Common.ViewModels.Pagination; using Umbraco.Cms.Api.Management.Factories; using Umbraco.Cms.Api.Management.ViewModels.HealthCheck; -using Umbraco.Cms.Core.HealthChecks; using Umbraco.Cms.Core.Mapping; namespace Umbraco.Cms.Api.Management.Controllers.HealthCheck.Group; public class AllHealthCheckGroupController : HealthCheckGroupControllerBase { - private readonly HealthCheckCollection _healthChecks; - private readonly IHealthCheckGroupWithResultViewModelFactory _healthCheckGroupWithResultViewModelFactory; + private readonly IHealthCheckGroupViewModelFactory _healthCheckGroupViewModelFactory; private readonly IUmbracoMapper _umbracoMapper; public AllHealthCheckGroupController( - HealthCheckCollection healthChecks, - IHealthCheckGroupWithResultViewModelFactory healthCheckGroupWithResultViewModelFactory, + IHealthCheckGroupViewModelFactory healthCheckGroupViewModelFactory, IUmbracoMapper umbracoMapper) { - _healthChecks = healthChecks; - _healthCheckGroupWithResultViewModelFactory = healthCheckGroupWithResultViewModelFactory; + _healthCheckGroupViewModelFactory = healthCheckGroupViewModelFactory; _umbracoMapper = umbracoMapper; } /// - /// Gets a paginated grouped list of all health checks without checking the result of each health check. + /// Gets a paginated grouped list of all names the health checks are grouped by. /// /// The amount of items to skip. /// The amount of items to take. - /// The paged result of health checks, grouped by health check group name. + /// The paged result of health checks group names. [HttpGet] [MapToApiVersion("1.0")] - [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)] - public async Task>> All(int skip = 0, int take = 100) + [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)] + public async Task>> All(int skip = 0, int take = 100) { - IEnumerable> groups = _healthCheckGroupWithResultViewModelFactory - .CreateGroupingFromHealthCheckCollection(_healthChecks) + IEnumerable> groups = _healthCheckGroupViewModelFactory + .CreateGroupingFromHealthCheckCollection() .Skip(skip) .Take(take); - return await Task.FromResult(Ok(_umbracoMapper.Map>(groups))); + return await Task.FromResult(Ok(_umbracoMapper.Map>(groups))); } } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/ByNameHealthCheckGroupController.cs b/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/ByNameHealthCheckGroupController.cs new file mode 100644 index 0000000000..9279d366bc --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/ByNameHealthCheckGroupController.cs @@ -0,0 +1,46 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Umbraco.Cms.Api.Management.Factories; +using Umbraco.Cms.Api.Management.ViewModels.HealthCheck; +using Umbraco.Cms.Core.Mapping; +using Umbraco.Extensions; + +namespace Umbraco.Cms.Api.Management.Controllers.HealthCheck.Group; + +public class ByNameHealthCheckGroupController : HealthCheckGroupControllerBase +{ + private readonly IHealthCheckGroupViewModelFactory _healthCheckGroupViewModelFactory; + private readonly IUmbracoMapper _umbracoMapper; + + public ByNameHealthCheckGroupController( + IHealthCheckGroupViewModelFactory healthCheckGroupViewModelFactory, + IUmbracoMapper umbracoMapper) + { + _healthCheckGroupViewModelFactory = healthCheckGroupViewModelFactory; + _umbracoMapper = umbracoMapper; + } + + /// + /// Gets a health check group with all its health checks by a group name. + /// + /// The name of the group. + /// The health check group or not found result. + [HttpGet("{name}")] + [MapToApiVersion("1.0")] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(typeof(HealthCheckGroupViewModel), StatusCodes.Status200OK)] + public async Task> ByName(string name) + { + IEnumerable> groups = _healthCheckGroupViewModelFactory + .CreateGroupingFromHealthCheckCollection(); + + IGrouping? group = groups.FirstOrDefault(x => x.Key.InvariantEquals(name.Trim())); + + if (group is null) + { + return NotFound(); + } + + return await Task.FromResult(Ok(_umbracoMapper.Map(group))); + } +} diff --git a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/ByNameWithResultHealthCheckGroupController.cs b/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/ByNameWithResultHealthCheckGroupController.cs deleted file mode 100644 index 14965ea926..0000000000 --- a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/ByNameWithResultHealthCheckGroupController.cs +++ /dev/null @@ -1,47 +0,0 @@ -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Umbraco.Cms.Api.Management.Factories; -using Umbraco.Cms.Api.Management.ViewModels.HealthCheck; -using Umbraco.Cms.Core.HealthChecks; -using Umbraco.Extensions; - -namespace Umbraco.Cms.Api.Management.Controllers.HealthCheck.Group; - -public class ByNameWithResultHealthCheckGroupController : HealthCheckGroupControllerBase -{ - private readonly HealthCheckCollection _healthChecks; - private readonly IHealthCheckGroupWithResultViewModelFactory _healthCheckGroupWithResultViewModelFactory; - - public ByNameWithResultHealthCheckGroupController( - HealthCheckCollection healthChecks, - IHealthCheckGroupWithResultViewModelFactory healthCheckGroupWithResultViewModelFactory) - { - _healthChecks = healthChecks; - _healthCheckGroupWithResultViewModelFactory = healthCheckGroupWithResultViewModelFactory; - } - - /// - /// Gets a health check group with all its health checks by a group name. - /// - /// The name of the group. - /// The health check result(s) will be included as part of the health checks. - /// The health check group or not found result. - [HttpGet("{name}")] - [MapToApiVersion("1.0")] - [ProducesResponseType(typeof(NotFoundResult), StatusCodes.Status404NotFound)] - [ProducesResponseType(typeof(HealthCheckGroupWithResultViewModel), StatusCodes.Status200OK)] - public async Task> ByName(string name) - { - IEnumerable> groups = _healthCheckGroupWithResultViewModelFactory - .CreateGroupingFromHealthCheckCollection(_healthChecks); - - IGrouping? group = groups.FirstOrDefault(x => x.Key.InvariantEquals(name.Trim())); - - if (group is null) - { - return await Task.FromResult(NotFound()); - } - - return await Task.FromResult(Ok(_healthCheckGroupWithResultViewModelFactory.CreateHealthCheckGroupWithResultViewModel(group))); - } -} diff --git a/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/CheckHealthCheckGroupController.cs b/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/CheckHealthCheckGroupController.cs new file mode 100644 index 0000000000..f6cc102166 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Controllers/HealthCheck/Group/CheckHealthCheckGroupController.cs @@ -0,0 +1,40 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Umbraco.Cms.Api.Management.Factories; +using Umbraco.Cms.Api.Management.ViewModels.HealthCheck; +using Umbraco.Extensions; + +namespace Umbraco.Cms.Api.Management.Controllers.HealthCheck.Group; + +public class CheckHealthCheckGroupController : HealthCheckGroupControllerBase +{ + private readonly IHealthCheckGroupViewModelFactory _healthCheckGroupViewModelFactory; + + public CheckHealthCheckGroupController(IHealthCheckGroupViewModelFactory healthCheckGroupViewModelFactory) + => _healthCheckGroupViewModelFactory = healthCheckGroupViewModelFactory; + + /// + /// Check all health checks in the group with a given group name. + /// + /// The name of the group. + /// The health check result(s) will be included as part of the health checks. + /// The health check group or not found result. + [HttpPost("{name}/check")] + [MapToApiVersion("1.0")] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(typeof(HealthCheckGroupWithResultViewModel), StatusCodes.Status200OK)] + public async Task> ByNameWithResult(string name) + { + IEnumerable> groups = _healthCheckGroupViewModelFactory + .CreateGroupingFromHealthCheckCollection(); + + IGrouping? group = groups.FirstOrDefault(x => x.Key.InvariantEquals(name.Trim())); + + if (group is null) + { + return NotFound(); + } + + return await Task.FromResult(Ok(_healthCheckGroupViewModelFactory.CreateHealthCheckGroupWithResultViewModel(group))); + } +} diff --git a/src/Umbraco.Cms.Api.Management/DependencyInjection/HealthCheckBuilderExtensions.cs b/src/Umbraco.Cms.Api.Management/DependencyInjection/HealthCheckBuilderExtensions.cs index 2c7e0044b1..bff58c6746 100644 --- a/src/Umbraco.Cms.Api.Management/DependencyInjection/HealthCheckBuilderExtensions.cs +++ b/src/Umbraco.Cms.Api.Management/DependencyInjection/HealthCheckBuilderExtensions.cs @@ -1,4 +1,4 @@ -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using Umbraco.Cms.Api.Management.Factories; using Umbraco.Cms.Api.Management.Mapping.HealthCheck; using Umbraco.Cms.Core.DependencyInjection; @@ -8,9 +8,9 @@ namespace Umbraco.Cms.Api.Management.DependencyInjection; internal static class HealthCheckBuilderExtensions { - internal static IUmbracoBuilder AddHealthCheck(this IUmbracoBuilder builder) + internal static IUmbracoBuilder AddHealthChecks(this IUmbracoBuilder builder) { - builder.Services.AddTransient(); + builder.Services.AddTransient(); builder.WithCollectionBuilder().Add(); diff --git a/src/Umbraco.Cms.Api.Management/Factories/HealthCheckGroupWithResultViewModelFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/HealthCheckGroupViewModelFactory.cs similarity index 75% rename from src/Umbraco.Cms.Api.Management/Factories/HealthCheckGroupWithResultViewModelFactory.cs rename to src/Umbraco.Cms.Api.Management/Factories/HealthCheckGroupViewModelFactory.cs index c09dd6d5cc..c969a04ca1 100644 --- a/src/Umbraco.Cms.Api.Management/Factories/HealthCheckGroupWithResultViewModelFactory.cs +++ b/src/Umbraco.Cms.Api.Management/Factories/HealthCheckGroupViewModelFactory.cs @@ -7,29 +7,32 @@ using Umbraco.Cms.Core.Mapping; namespace Umbraco.Cms.Api.Management.Factories; -public class HealthCheckGroupWithResultViewModelFactory : IHealthCheckGroupWithResultViewModelFactory +public class HealthCheckGroupViewModelFactory : IHealthCheckGroupViewModelFactory { private readonly HealthChecksSettings _healthChecksSettings; - private readonly ILogger _logger; + private readonly HealthCheckCollection _healthChecks; + private readonly ILogger _logger; private readonly IUmbracoMapper _umbracoMapper; - public HealthCheckGroupWithResultViewModelFactory( + public HealthCheckGroupViewModelFactory( IOptions healthChecksSettings, - ILogger logger, + HealthCheckCollection healthChecks, + ILogger logger, IUmbracoMapper umbracoMapper) { _healthChecksSettings = healthChecksSettings.Value; + _healthChecks = healthChecks; _logger = logger; _umbracoMapper = umbracoMapper; } - public IEnumerable> CreateGroupingFromHealthCheckCollection(HealthCheckCollection healthChecks) + public IEnumerable> CreateGroupingFromHealthCheckCollection() { IList disabledCheckIds = _healthChecksSettings.DisabledChecks .Select(x => x.Id) .ToList(); - IEnumerable> groups = healthChecks + IEnumerable> groups = _healthChecks .Where(x => disabledCheckIds.Contains(x.Id) == false) .GroupBy(x => x.Group) .OrderBy(x => x.Key); @@ -48,7 +51,6 @@ public class HealthCheckGroupWithResultViewModelFactory : IHealthCheckGroupWithR var healthCheckGroupViewModel = new HealthCheckGroupWithResultViewModel { - Name = healthCheckGroup.Key, Checks = healthChecks }; @@ -57,15 +59,13 @@ public class HealthCheckGroupWithResultViewModelFactory : IHealthCheckGroupWithR public HealthCheckWithResultViewModel CreateHealthCheckWithResultViewModel(HealthCheck healthCheck) { - _logger.LogDebug("Running health check: " + healthCheck.Name); + _logger.LogDebug($"Running health check: {healthCheck.Name}"); IEnumerable results = healthCheck.GetStatus().Result; var healthCheckViewModel = new HealthCheckWithResultViewModel { Key = healthCheck.Id, - Name = healthCheck.Name, - Description = healthCheck.Description, Results = _umbracoMapper.MapEnumerable(results) }; diff --git a/src/Umbraco.Cms.Api.Management/Factories/IHealthCheckGroupWithResultViewModelFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/IHealthCheckGroupViewModelFactory.cs similarity index 78% rename from src/Umbraco.Cms.Api.Management/Factories/IHealthCheckGroupWithResultViewModelFactory.cs rename to src/Umbraco.Cms.Api.Management/Factories/IHealthCheckGroupViewModelFactory.cs index 3ee0146b29..289db269de 100644 --- a/src/Umbraco.Cms.Api.Management/Factories/IHealthCheckGroupWithResultViewModelFactory.cs +++ b/src/Umbraco.Cms.Api.Management/Factories/IHealthCheckGroupViewModelFactory.cs @@ -3,9 +3,9 @@ using Umbraco.Cms.Core.HealthChecks; namespace Umbraco.Cms.Api.Management.Factories; -public interface IHealthCheckGroupWithResultViewModelFactory +public interface IHealthCheckGroupViewModelFactory { - IEnumerable> CreateGroupingFromHealthCheckCollection(HealthCheckCollection healthChecks); + IEnumerable> CreateGroupingFromHealthCheckCollection(); HealthCheckGroupWithResultViewModel CreateHealthCheckGroupWithResultViewModel(IGrouping healthCheckGroup); diff --git a/src/Umbraco.Cms.Api.Management/ManagementApiComposer.cs b/src/Umbraco.Cms.Api.Management/ManagementApiComposer.cs index 50790d8556..24c3056e7b 100644 --- a/src/Umbraco.Cms.Api.Management/ManagementApiComposer.cs +++ b/src/Umbraco.Cms.Api.Management/ManagementApiComposer.cs @@ -30,7 +30,7 @@ public class ManagementApiComposer : IComposer .AddLanguages() .AddDictionary() .AddFileUpload() - .AddHealthCheck() + .AddHealthChecks() .AddModelsBuilder() .AddRedirectUrl() .AddTrackedReferences() diff --git a/src/Umbraco.Cms.Api.Management/Mapping/HealthCheck/HealthCheckViewModelsMapDefinition.cs b/src/Umbraco.Cms.Api.Management/Mapping/HealthCheck/HealthCheckViewModelsMapDefinition.cs index bc70fd5f7b..1b665836d9 100644 --- a/src/Umbraco.Cms.Api.Management/Mapping/HealthCheck/HealthCheckViewModelsMapDefinition.cs +++ b/src/Umbraco.Cms.Api.Management/Mapping/HealthCheck/HealthCheckViewModelsMapDefinition.cs @@ -13,8 +13,15 @@ public class HealthCheckViewModelsMapDefinition : IMapDefinition mapper.Define((source, context) => new HealthCheckActionViewModel() { ValueRequired = false }, Map); mapper.Define((source, context) => new HealthCheckResultViewModel() { Message = string.Empty }, Map); mapper.Define((source, context) => new HealthCheckViewModel() { Name = string.Empty }, Map); - mapper.Define, HealthCheckGroupViewModel>((source, context) => new HealthCheckGroupViewModel() { Checks = new List() }, Map); - mapper.Define>, PagedViewModel>((source, context) => new PagedViewModel(), Map); + mapper.Define, HealthCheckGroupViewModel>( + (source, context) => new HealthCheckGroupViewModel() + { + Name = string.Empty, + Checks = new List() + }, + Map); + mapper.Define, HealthCheckGroupModelBase>((source, context) => new HealthCheckGroupModelBase() { Name = string.Empty }, Map); + mapper.Define>, PagedViewModel>((source, context) => new PagedViewModel(), Map); } // Umbraco.Code.MapAll -ActionParameters @@ -67,14 +74,27 @@ public class HealthCheckViewModelsMapDefinition : IMapDefinition // Umbraco.Code.MapAll private static void Map(IGrouping source, HealthCheckGroupViewModel target, MapperContext context) { - target.Name = source.Key; + if (source.Key is not null) + { + target.Name = source.Key; + } + target.Checks = context.MapEnumerable(source.OrderBy(x => x.Name)); } // Umbraco.Code.MapAll - private static void Map(IEnumerable> source, PagedViewModel target, MapperContext context) + private static void Map(IGrouping source, HealthCheckGroupModelBase target, MapperContext context) { - target.Items = context.MapEnumerable, HealthCheckGroupViewModel>(source); + if (source.Key is not null) + { + target.Name = source.Key; + } + } + + // Umbraco.Code.MapAll + private static void Map(IEnumerable> source, PagedViewModel target, MapperContext context) + { + target.Items = context.MapEnumerable, HealthCheckGroupModelBase>(source); target.Total = source.Count(); } } diff --git a/src/Umbraco.Cms.Api.Management/OpenApi.json b/src/Umbraco.Cms.Api.Management/OpenApi.json index 9e2319c572..265e5e52af 100644 --- a/src/Umbraco.Cms.Api.Management/OpenApi.json +++ b/src/Umbraco.Cms.Api.Management/OpenApi.json @@ -865,7 +865,7 @@ ], "operationId": "PostDictionaryUpload", "requestBody": { - "content": { } + "content": {} }, "responses": { "200": { @@ -1540,7 +1540,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PagedHealthCheckGroupModel" + "$ref": "#/components/schemas/PagedHealthCheckGroupModelBaseModel" } } } @@ -1570,7 +1570,47 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotFoundResultModel" + "$ref": "#/components/schemas/ProblemDetailsModel" + } + } + } + }, + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HealthCheckGroupModel" + } + } + } + } + } + } + }, + "/umbraco/management/api/v1/health-check-group/{name}/check": { + "post": { + "tags": [ + "Health Check" + ], + "operationId": "PostHealthCheckGroupByNameCheck", + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetailsModel" } } } @@ -6212,8 +6252,7 @@ "type": "object", "properties": { "name": { - "type": "string", - "nullable": true + "type": "string" }, "checks": { "type": "array", @@ -6224,13 +6263,18 @@ }, "additionalProperties": false }, - "HealthCheckGroupWithResultModel": { + "HealthCheckGroupModelBaseModel": { "type": "object", "properties": { "name": { - "type": "string", - "nullable": true - }, + "type": "string" + } + }, + "additionalProperties": false + }, + "HealthCheckGroupWithResultModel": { + "type": "object", + "properties": { "checks": { "type": "array", "items": { @@ -6287,13 +6331,6 @@ "type": "string", "format": "uuid" }, - "name": { - "type": "string" - }, - "description": { - "type": "string", - "nullable": true - }, "results": { "type": "array", "items": { @@ -6375,7 +6412,7 @@ }, "providerProperties": { "type": "object", - "additionalProperties": { }, + "additionalProperties": {}, "nullable": true } }, @@ -7277,7 +7314,7 @@ }, "additionalProperties": false }, - "PagedHealthCheckGroupModel": { + "PagedHealthCheckGroupModelBaseModel": { "required": [ "items", "total" @@ -7291,7 +7328,7 @@ "items": { "type": "array", "items": { - "$ref": "#/components/schemas/HealthCheckGroupModel" + "$ref": "#/components/schemas/HealthCheckGroupModelBaseModel" } } }, @@ -7688,7 +7725,7 @@ "nullable": true } }, - "additionalProperties": { } + "additionalProperties": {} }, "ProfilingStatusModel": { "type": "object", @@ -9046,7 +9083,7 @@ "authorizationCode": { "authorizationUrl": "/umbraco/management/api/v1.0/security/back-office/authorize", "tokenUrl": "/umbraco/management/api/v1.0/security/back-office/token", - "scopes": { } + "scopes": {} } } } @@ -9054,7 +9091,7 @@ }, "security": [ { - "OAuth": [ ] + "OAuth": [] } ] } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckGroupModelBase.cs b/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckGroupModelBase.cs new file mode 100644 index 0000000000..57b10e2b13 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckGroupModelBase.cs @@ -0,0 +1,9 @@ +namespace Umbraco.Cms.Api.Management.ViewModels.HealthCheck; + +public class HealthCheckGroupModelBase +{ + /// + /// Gets or sets the name. + /// + public required string Name { get; set; } +} diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckGroupViewModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckGroupViewModel.cs index 74b5995d37..38c0d4666d 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckGroupViewModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckGroupViewModel.cs @@ -1,12 +1,7 @@ namespace Umbraco.Cms.Api.Management.ViewModels.HealthCheck; -public class HealthCheckGroupViewModel +public class HealthCheckGroupViewModel : HealthCheckGroupModelBase { - /// - /// Gets or sets the name. - /// - public string? Name { get; set; } - /// /// Gets or sets the health checks. /// diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckGroupWithResultViewModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckGroupWithResultViewModel.cs index a5ad99eea0..f874bf8af2 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckGroupWithResultViewModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckGroupWithResultViewModel.cs @@ -2,11 +2,6 @@ namespace Umbraco.Cms.Api.Management.ViewModels.HealthCheck; public class HealthCheckGroupWithResultViewModel { - /// - /// Gets or sets the name. - /// - public string? Name { get; set; } - /// /// Gets or sets the health checks with the result(s) from each health check. /// diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckModelBase.cs b/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckModelBase.cs new file mode 100644 index 0000000000..17be73f5d7 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckModelBase.cs @@ -0,0 +1,9 @@ +namespace Umbraco.Cms.Api.Management.ViewModels.HealthCheck; + +public class HealthCheckModelBase +{ + /// + /// Gets or sets the key. + /// + public Guid Key { get; set; } +} diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckViewModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckViewModel.cs index 39cde4843e..2476ba1d16 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckViewModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckViewModel.cs @@ -1,12 +1,7 @@ namespace Umbraco.Cms.Api.Management.ViewModels.HealthCheck; -public class HealthCheckViewModel +public class HealthCheckViewModel : HealthCheckModelBase { - /// - /// Gets or sets the key. - /// - public Guid Key { get; set; } - /// /// Gets or sets the name. /// diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckWithResultViewModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckWithResultViewModel.cs index c566ae86b8..9c794d1373 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckWithResultViewModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/HealthCheck/HealthCheckWithResultViewModel.cs @@ -1,6 +1,6 @@ namespace Umbraco.Cms.Api.Management.ViewModels.HealthCheck; -public class HealthCheckWithResultViewModel : HealthCheckViewModel +public class HealthCheckWithResultViewModel : HealthCheckModelBase { /// /// Gets or sets the result(s) for a health check.