Property level validation for Management API (#15644)
* Property level validation for content - initial implementation * Always succeed create/update regardless of property level validation errors * Move old complex editor validation classes to Web.BackOffice so they will be deleted * Include operation status and property validation errors in ProblemDetails * Refactor property validation to its own service(s) * Make the problem details builder a little more generic towards extensions * Validation for item and branch publish * Moved malplaced test * Get rid of a TODO * Integration tests for content validation service * Simplify validation service * Add missing response types to create and update for document and media * Remove test that no longer applies * Use "errors" for model validation errors (property validation errors) * Split create/update and validation into their own endpoints * Fix forward merge * Correct wrong assumption for missing properties * Remove localization from validation error messages - decreases dependencies, adds a lot of obsolete constructors * Reuse existing validation service + support custom error messages * Fix merge errors * Review comments
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
using Asp.Versioning;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Umbraco.Cms.Api.Management.Factories;
|
||||
using Umbraco.Cms.Api.Management.ViewModels.Media;
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Core.Models.ContentEditing;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Core.Services.OperationStatus;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.Controllers.Media;
|
||||
|
||||
[ApiVersion("1.0")]
|
||||
public class ValidateUpdateMediaController : UpdateMediaControllerBase
|
||||
{
|
||||
private readonly IMediaEditingService _mediaEditingService;
|
||||
private readonly IMediaEditingPresentationFactory _mediaEditingPresentationFactory;
|
||||
|
||||
public ValidateUpdateMediaController(
|
||||
IAuthorizationService authorizationService,
|
||||
IMediaEditingService mediaEditingService,
|
||||
IMediaEditingPresentationFactory mediaEditingPresentationFactory)
|
||||
: base(authorizationService, mediaEditingService)
|
||||
{
|
||||
_mediaEditingService = mediaEditingService;
|
||||
_mediaEditingPresentationFactory = mediaEditingPresentationFactory;
|
||||
}
|
||||
|
||||
[HttpPut("{id:guid}/validate")]
|
||||
[MapToApiVersion("1.0")]
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
|
||||
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
|
||||
public async Task<IActionResult> Validate(Guid id, UpdateMediaRequestModel requestModel)
|
||||
=> await HandleRequest(id, async content =>
|
||||
{
|
||||
MediaUpdateModel model = _mediaEditingPresentationFactory.MapUpdateModel(requestModel);
|
||||
Attempt<ContentValidationResult, ContentEditingOperationStatus> result = await _mediaEditingService.ValidateUpdateAsync(content, model);
|
||||
|
||||
return result.Success
|
||||
? Ok()
|
||||
: MediaEditingOperationStatusResult(result.Status, requestModel, result.Result);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user