From 669f8ff5ba25aa933915ce7df993d36b3b9665fd Mon Sep 17 00:00:00 2001 From: Mole Date: Thu, 1 Sep 2022 14:01:49 +0200 Subject: [PATCH] Backoffice Api: Server Controller (#12932) * Add initial implementation using 1 controller pr. action * Add OpenApiTag attribute Otherwise the endpoints won't be grouped correctly * Use correct response type * Move ApiVersion to endpoint controllers * Add ServerController suffix to endpoint controllers (cherry picked from commit 9cf7e965a962665f88e669badd77bb4b75c08889) --- .../Server/ServerControllerBase.cs | 13 +++++++++++ .../Server/StatusServerController.cs | 21 ++++++++++++++++++ .../Server/VersionServerController.cs | 22 +++++++++++++++++++ .../Server/ServerStatusViewModel.cs | 10 +++++++++ .../ViewModels/Server/VersionViewModel.cs | 6 +++++ 5 files changed, 72 insertions(+) create mode 100644 src/Umbraco.Cms.ManagementApi/Controllers/Server/ServerControllerBase.cs create mode 100644 src/Umbraco.Cms.ManagementApi/Controllers/Server/StatusServerController.cs create mode 100644 src/Umbraco.Cms.ManagementApi/Controllers/Server/VersionServerController.cs create mode 100644 src/Umbraco.Cms.ManagementApi/ViewModels/Server/ServerStatusViewModel.cs create mode 100644 src/Umbraco.Cms.ManagementApi/ViewModels/Server/VersionViewModel.cs diff --git a/src/Umbraco.Cms.ManagementApi/Controllers/Server/ServerControllerBase.cs b/src/Umbraco.Cms.ManagementApi/Controllers/Server/ServerControllerBase.cs new file mode 100644 index 0000000000..cdb4921ba3 --- /dev/null +++ b/src/Umbraco.Cms.ManagementApi/Controllers/Server/ServerControllerBase.cs @@ -0,0 +1,13 @@ +using Microsoft.AspNetCore.Mvc; +using NSwag.Annotations; +using Umbraco.New.Cms.Web.Common.Routing; + +namespace Umbraco.Cms.ManagementApi.Controllers.Server; + +[ApiController] +[BackOfficeRoute("api/v{version:apiVersion}/server")] +[OpenApiTag("Server")] +public abstract class ServerControllerBase : Controller +{ + +} diff --git a/src/Umbraco.Cms.ManagementApi/Controllers/Server/StatusServerController.cs b/src/Umbraco.Cms.ManagementApi/Controllers/Server/StatusServerController.cs new file mode 100644 index 0000000000..875e685c27 --- /dev/null +++ b/src/Umbraco.Cms.ManagementApi/Controllers/Server/StatusServerController.cs @@ -0,0 +1,21 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.ManagementApi.ViewModels.Server; + +namespace Umbraco.Cms.ManagementApi.Controllers.Server; + +[ApiVersion("1.0")] +public class StatusServerController : ServerControllerBase +{ + private readonly IRuntimeState _runtimeState; + + public StatusServerController(IRuntimeState runtimeState) => _runtimeState = runtimeState; + + [HttpGet("status")] + [MapToApiVersion("1.0")] + [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)] + [ProducesResponseType(typeof(ServerStatusViewModel), StatusCodes.Status200OK)] + public async Task> Get() => + new ServerStatusViewModel { ServerStatus = _runtimeState.Level }; +} diff --git a/src/Umbraco.Cms.ManagementApi/Controllers/Server/VersionServerController.cs b/src/Umbraco.Cms.ManagementApi/Controllers/Server/VersionServerController.cs new file mode 100644 index 0000000000..fbd4f271e7 --- /dev/null +++ b/src/Umbraco.Cms.ManagementApi/Controllers/Server/VersionServerController.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Umbraco.Cms.Core.Configuration; +using Umbraco.Cms.ManagementApi.ViewModels.Server; +using Umbraco.Extensions; + +namespace Umbraco.Cms.ManagementApi.Controllers.Server; + +[ApiVersion("1.0")] +public class VersionServerController : ServerControllerBase +{ + private readonly IUmbracoVersion _umbracoVersion; + + public VersionServerController(IUmbracoVersion umbracoVersion) => _umbracoVersion = umbracoVersion; + + [HttpGet("version")] + [MapToApiVersion("1.0")] + [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)] + [ProducesResponseType(typeof(VersionViewModel), StatusCodes.Status200OK)] + public async Task> Get() => + new VersionViewModel { Version = _umbracoVersion.SemanticVersion.ToSemanticStringWithoutBuild() }; +} diff --git a/src/Umbraco.Cms.ManagementApi/ViewModels/Server/ServerStatusViewModel.cs b/src/Umbraco.Cms.ManagementApi/ViewModels/Server/ServerStatusViewModel.cs new file mode 100644 index 0000000000..48cfed65c4 --- /dev/null +++ b/src/Umbraco.Cms.ManagementApi/ViewModels/Server/ServerStatusViewModel.cs @@ -0,0 +1,10 @@ +using System.Text.Json.Serialization; +using Umbraco.Cms.Core; + +namespace Umbraco.Cms.ManagementApi.ViewModels.Server; + +public class ServerStatusViewModel +{ + [JsonConverter(typeof(JsonStringEnumConverter))] + public RuntimeLevel ServerStatus { get; set; } +} diff --git a/src/Umbraco.Cms.ManagementApi/ViewModels/Server/VersionViewModel.cs b/src/Umbraco.Cms.ManagementApi/ViewModels/Server/VersionViewModel.cs new file mode 100644 index 0000000000..41a55e64b7 --- /dev/null +++ b/src/Umbraco.Cms.ManagementApi/ViewModels/Server/VersionViewModel.cs @@ -0,0 +1,6 @@ +namespace Umbraco.Cms.ManagementApi.ViewModels.Server; + +public class VersionViewModel +{ + public string Version { get; set; } = null!; +}