using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Api.Management.ViewModels.Dictionary; using Umbraco.Extensions; namespace Umbraco.Cms.Api.Management.Controllers.Dictionary; public class CreateDictionaryController : DictionaryControllerBase { private readonly ILocalizationService _localizationService; private readonly ILocalizedTextService _localizedTextService; private readonly GlobalSettings _globalSettings; private readonly IBackOfficeSecurityAccessor _backofficeSecurityAccessor; private readonly ILogger _logger; public CreateDictionaryController( ILocalizationService localizationService, ILocalizedTextService localizedTextService, IOptionsSnapshot globalSettings, IBackOfficeSecurityAccessor backofficeSecurityAccessor, ILogger logger) { _localizationService = localizationService; _localizedTextService = localizedTextService; _globalSettings = globalSettings.Value; _backofficeSecurityAccessor = backofficeSecurityAccessor; _logger = logger; } /// /// Creates a new dictionary item /// /// The viewmodel to pass to the action /// /// The . /// [HttpPost] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(CreatedResult), StatusCodes.Status201Created)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)] public async Task> Create(DictionaryItemViewModel dictionaryViewModel) { if (string.IsNullOrEmpty(dictionaryViewModel.Key.ToString())) { return ValidationProblem("Key can not be empty."); // TODO: translate } if (_localizationService.DictionaryItemExists(dictionaryViewModel.Key.ToString())) { var message = _localizedTextService.Localize( "dictionaryItem", "changeKeyError", _backofficeSecurityAccessor.BackOfficeSecurity?.CurrentUser?.GetUserCulture(_localizedTextService, _globalSettings), new Dictionary { { "0", dictionaryViewModel.Key.ToString() }, }); return await Task.FromResult(ValidationProblem(message)); } try { Guid? parentGuid = null; if (dictionaryViewModel.ParentId.HasValue) { parentGuid = dictionaryViewModel.ParentId; } IDictionaryItem item = _localizationService.CreateDictionaryItemWithIdentity( dictionaryViewModel.Key.ToString(), parentGuid, string.Empty); return await Task.FromResult(Created($"api/v1.0/dictionary/{item.Key}", item.Key)); } catch (Exception ex) { _logger.LogError(ex, "Error creating dictionary with {Name} under {ParentId}", dictionaryViewModel.Key, dictionaryViewModel.ParentId); return await Task.FromResult(ValidationProblem("Error creating dictionary item")); } } }