* 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
50 lines
2.2 KiB
C#
50 lines
2.2 KiB
C#
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.Security;
|
|
using Umbraco.Cms.Core.Services;
|
|
using Umbraco.Cms.Core.Services.OperationStatus;
|
|
|
|
namespace Umbraco.Cms.Api.Management.Controllers.Media;
|
|
|
|
[ApiVersion("1.0")]
|
|
public class CreateMediaController : CreateMediaControllerBase
|
|
{
|
|
private readonly IMediaEditingPresentationFactory _mediaEditingPresentationFactory;
|
|
private readonly IMediaEditingService _mediaEditingService;
|
|
private readonly IBackOfficeSecurityAccessor _backOfficeSecurityAccessor;
|
|
|
|
public CreateMediaController(
|
|
IAuthorizationService authorizationService,
|
|
IMediaEditingPresentationFactory mediaEditingPresentationFactory,
|
|
IMediaEditingService mediaEditingService,
|
|
IBackOfficeSecurityAccessor backOfficeSecurityAccessor)
|
|
: base(authorizationService)
|
|
{
|
|
_mediaEditingPresentationFactory = mediaEditingPresentationFactory;
|
|
_mediaEditingService = mediaEditingService;
|
|
_backOfficeSecurityAccessor = backOfficeSecurityAccessor;
|
|
}
|
|
|
|
[HttpPost]
|
|
[MapToApiVersion("1.0")]
|
|
[ProducesResponseType(StatusCodes.Status201Created)]
|
|
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
|
|
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
|
|
public async Task<IActionResult> Create(CreateMediaRequestModel requestModel)
|
|
=> await HandleRequest(requestModel.Parent?.Id, async () =>
|
|
{
|
|
MediaCreateModel model = _mediaEditingPresentationFactory.MapCreateModel(requestModel);
|
|
Attempt<MediaCreateResult, ContentEditingOperationStatus> result = await _mediaEditingService.CreateAsync(model, CurrentUserKey(_backOfficeSecurityAccessor));
|
|
|
|
return result.Success
|
|
? CreatedAtId<ByKeyMediaController>(controller => nameof(controller.ByKey), result.Result.Content!.Key)
|
|
: ContentEditingOperationStatusResult(result.Status);
|
|
});
|
|
}
|