From c277005b62dd9ea143670720da72a9df7c905bd6 Mon Sep 17 00:00:00 2001 From: Sven Geusens Date: Thu, 29 Aug 2024 10:12:43 +0200 Subject: [PATCH] improve missingProperties data returned for missing propertie values (#16910) Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> --- .../Content/ContentControllerBase.cs | 19 ++++++++++++++++--- .../PropertyValidationResponseModel.cs | 12 ++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 src/Umbraco.Cms.Api.Management/ViewModels/Content/PropertyValidationResponseModel.cs diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Content/ContentControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/Content/ContentControllerBase.cs index a2277820bf..c008dad102 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Content/ContentControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Content/ContentControllerBase.cs @@ -1,5 +1,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using Umbraco.Cms.Api.Management.ViewModels.Content; +using Umbraco.Cms.Core.Mapping; using Umbraco.Cms.Core.Models.ContentEditing; using Umbraco.Cms.Core.Models.ContentEditing.Validation; using Umbraco.Cms.Core.Services.OperationStatus; @@ -9,6 +11,7 @@ namespace Umbraco.Cms.Api.Management.Controllers.Content; public abstract class ContentControllerBase : ManagementApiControllerBase { + protected IActionResult ContentEditingOperationStatusResult(ContentEditingOperationStatus status) => OperationStatusResult(status, problemDetailsBuilder => status switch { @@ -96,7 +99,8 @@ public abstract class ContentControllerBase : ManagementApiControllerBase } var errors = new SortedDictionary(); - var missingPropertyAliases = new List(); + + var missingPropertyModels = new List(); foreach (PropertyValidationError validationError in validationResult.ValidationErrors) { TValueModel? requestValue = requestModel.Values.FirstOrDefault(value => @@ -105,7 +109,7 @@ public abstract class ContentControllerBase : ManagementApiControllerBase && value.Segment == validationError.Segment); if (requestValue is null) { - missingPropertyAliases.Add(validationError.Alias); + missingPropertyModels.Add(MapMissingProperty(validationError)); continue; } @@ -119,7 +123,16 @@ public abstract class ContentControllerBase : ManagementApiControllerBase .WithTitle("Validation failed") .WithDetail("One or more properties did not pass validation") .WithRequestModelErrors(errors) - .WithExtension("missingProperties", missingPropertyAliases.ToArray()) + .WithExtension("missingValues", missingPropertyModels.ToArray()) .Build())); } + + private PropertyValidationResponseModel MapMissingProperty(PropertyValidationError source) => + new() + { + Alias = source.Alias, + Segment = source.Segment, + Culture = source.Culture, + Messages = source.ErrorMessages, + }; } diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Content/PropertyValidationResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Content/PropertyValidationResponseModel.cs new file mode 100644 index 0000000000..6f8d918c3e --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Content/PropertyValidationResponseModel.cs @@ -0,0 +1,12 @@ +namespace Umbraco.Cms.Api.Management.ViewModels.Content; + +public class PropertyValidationResponseModel +{ + public string[] Messages { get; set; } = Array.Empty(); + + public string Alias { get; set; } = string.Empty; + + public string? Culture { get; set; } + + public string? Segment { get; set; } +}