using Asp.Versioning; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Api.Management.ViewModels.Language; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Mapping; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Services.OperationStatus; namespace Umbraco.Cms.Api.Management.Controllers.Language; [ApiVersion("1.0")] public class CreateLanguageController : LanguageControllerBase { private readonly ILanguageService _languageService; private readonly IUmbracoMapper _umbracoMapper; private readonly IBackOfficeSecurityAccessor _backOfficeSecurityAccessor; public CreateLanguageController( ILanguageService languageService, IUmbracoMapper umbracoMapper, IBackOfficeSecurityAccessor backOfficeSecurityAccessor) { _languageService = languageService; _umbracoMapper = umbracoMapper; _backOfficeSecurityAccessor = backOfficeSecurityAccessor; } [HttpPost] [MapToApiVersion("1.0")] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status201Created)] public async Task Create(CreateLanguageRequestModel createLanguageRequestModel) { ILanguage created = _umbracoMapper.Map(createLanguageRequestModel)!; Attempt result = await _languageService.CreateAsync(created, CurrentUserKey(_backOfficeSecurityAccessor)); return result.Success ? CreatedAtAction(controller => nameof(controller.ByIsoCode), new { isoCode = result.Result.IsoCode }) : LanguageOperationStatusResult(result.Status); } }