diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/DefaultLanguageEntityController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/DefaultLanguageEntityController.cs new file mode 100644 index 0000000000..a810b6f3af --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Controllers/Language/Item/DefaultLanguageEntityController.cs @@ -0,0 +1,36 @@ +using Asp.Versioning; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Umbraco.Cms.Api.Management.ViewModels.Language.Item; +using Umbraco.Cms.Core.Mapping; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Services.OperationStatus; + +namespace Umbraco.Cms.Api.Management.Controllers.Language.Item; + +[ApiVersion("1.0")] +public class DefaultLanguageEntityController : LanguageEntityControllerBase +{ + private readonly ILanguageService _languageService; + private readonly IUmbracoMapper _mapper; + + public DefaultLanguageEntityController(ILanguageService languageService, IUmbracoMapper mapper) + { + _languageService = languageService; + _mapper = mapper; + } + + [HttpGet("default")] + [MapToApiVersion("1.0")] + [ProducesResponseType(typeof(LanguageItemResponseModel), StatusCodes.Status200OK)] + public async Task Default(CancellationToken cancellationToken) + { + ILanguage? language = await _languageService.GetDefaultLanguageAsync(); + return language is not null + ? Ok(_mapper.Map(language)) + : OperationStatusResult( + LanguageOperationStatus.NotFound, + problemDetailsBuilder => NotFound(problemDetailsBuilder.WithTitle("The default language could not be found."))); + } +} diff --git a/src/Umbraco.Cms.Api.Management/OpenApi.json b/src/Umbraco.Cms.Api.Management/OpenApi.json index ea506a31c0..1d2fe267eb 100644 --- a/src/Umbraco.Cms.Api.Management/OpenApi.json +++ b/src/Umbraco.Cms.Api.Management/OpenApi.json @@ -11419,6 +11419,41 @@ ] } }, + "/umbraco/management/api/v1/item/language/default": { + "get": { + "tags": [ + "Language" + ], + "operationId": "GetItemLanguageDefault", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/LanguageItemResponseModel" + } + ] + } + } + } + }, + "401": { + "description": "The resource is protected and requires an authentication token" + }, + "403": { + "description": "The authenticated user do not have access to this resource" + } + }, + "security": [ + { + "Backoffice User": [ ] + } + ] + } + }, "/umbraco/management/api/v1/language": { "get": { "tags": [ diff --git a/src/Umbraco.Core/Services/ILanguageService.cs b/src/Umbraco.Core/Services/ILanguageService.cs index e3f5c38f67..f1285b74a5 100644 --- a/src/Umbraco.Core/Services/ILanguageService.cs +++ b/src/Umbraco.Core/Services/ILanguageService.cs @@ -14,6 +14,14 @@ public interface ILanguageService /// Task GetAsync(string isoCode); + /// + /// Gets the default + /// + /// + /// + /// + Task GetDefaultLanguageAsync(); + /// /// Gets the default language ISO code. /// diff --git a/src/Umbraco.Core/Services/LanguageService.cs b/src/Umbraco.Core/Services/LanguageService.cs index e97f5df314..343a762367 100644 --- a/src/Umbraco.Core/Services/LanguageService.cs +++ b/src/Umbraco.Core/Services/LanguageService.cs @@ -42,6 +42,15 @@ internal sealed class LanguageService : RepositoryService, ILanguageService } } + /// + public async Task GetDefaultLanguageAsync() + { + using (ScopeProvider.CreateCoreScope(autoComplete: true)) + { + return await Task.FromResult(_languageRepository.GetByIsoCode(_languageRepository.GetDefaultIsoCode())); + } + } + /// public async Task GetDefaultIsoCodeAsync() {