V14: Public access controller (#14501)
* Implement GetEntryByContentKey * Implement PublicAccessResponseModel * Implement IPublicAccessPresentationFactory * Rename MemberGroupItemReponseModel to MemberGroupItemResponseModel * Refactor PublicAccessResponseModel to use Ids instead of entire content items * Return attempt instead of PresentationModel * Add missing statuses to PublicAccessOperationStatusResult * Implement PublicAccessDocumentController.cs * Refacotr PublicAccessResponseModel to use a base model * Add CreatePublicAccessEntry method * Refactor AccessRequestModel to use names not ids :( * Rename ErrorPageNotFound to ErrorNodeNotFound * Implement new SaveAsync method * Introduce more OperationResults * Implement PublicAccessEntrySlim * Implement SaveAsync * Remove CreatePublicAccessEntry from presentation factory * Rename to CreateAsync * Implement UpdateAsync * Rename to async * Implement CreatePublicAccessEntry * Implement update endpoint * remove PublicAccessEntrySlim mapping * implement CreatePublicAccessEntrySlim method * Refactor UpdateAsync * Remove ContentId from request model as it should be in the request * Use new service layer * Amend method name in update controller * Refactor create public access entry to use async method and return entity * Refactor to use saveAsync method instead of synchronously * Use presentation factory instead of mapping * Implement deleteAsync endpoint * Add produces response type * Refactor mapping to not use UmbracoMapper, as that causes errors * Update OpenApi.json * Refactor out variables to intermediate object * Validate that groups and names are not specified at the same time * Make presentation factory not async * Minor cleanup --------- Co-authored-by: Zeegaan <nge@umbraco.dk> Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
using Asp.Versioning;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Umbraco.Cms.Api.Management.Factories;
|
||||
using Umbraco.Cms.Api.Management.ViewModels.PublicAccess;
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Core.Services.OperationStatus;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.Controllers.Document;
|
||||
|
||||
public class CreatePublicAccessDocumentController : DocumentControllerBase
|
||||
{
|
||||
private readonly IPublicAccessService _publicAccessService;
|
||||
private readonly IPublicAccessPresentationFactory _publicAccessPresentationFactory;
|
||||
|
||||
public CreatePublicAccessDocumentController(
|
||||
IPublicAccessService publicAccessService,
|
||||
IPublicAccessPresentationFactory publicAccessPresentationFactory)
|
||||
{
|
||||
_publicAccessService = publicAccessService;
|
||||
_publicAccessPresentationFactory = publicAccessPresentationFactory;
|
||||
}
|
||||
|
||||
[MapToApiVersion("1.0")]
|
||||
[HttpPost("{id:guid}/public-access")]
|
||||
[ProducesResponseType(StatusCodes.Status201Created)]
|
||||
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||
public async Task<IActionResult> Create(Guid id, PublicAccessRequestModel publicAccessRequestModel)
|
||||
{
|
||||
PublicAccessEntrySlim publicAccessEntrySlim = _publicAccessPresentationFactory.CreatePublicAccessEntrySlim(publicAccessRequestModel, id);
|
||||
|
||||
Attempt<PublicAccessEntry?, PublicAccessOperationStatus> saveAttempt = await _publicAccessService.CreateAsync(publicAccessEntrySlim);
|
||||
|
||||
return saveAttempt.Success
|
||||
? CreatedAtAction<GetPublicAccessDocumentController>(controller => nameof(controller.GetPublicAccess), saveAttempt.Result!.Key)
|
||||
: PublicAccessOperationStatusResult(saveAttempt.Status);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using Asp.Versioning;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.Controllers.Document;
|
||||
|
||||
public class DeletePublicAccessDocumentController : DocumentControllerBase
|
||||
{
|
||||
private readonly IPublicAccessService _publicAccessService;
|
||||
|
||||
public DeletePublicAccessDocumentController(IPublicAccessService publicAccessService) => _publicAccessService = publicAccessService;
|
||||
|
||||
[MapToApiVersion("1.0")]
|
||||
[HttpDelete("{id:guid}/public-access")]
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||
public async Task<IActionResult> Delete(Guid id)
|
||||
{
|
||||
await _publicAccessService.DeleteAsync(id);
|
||||
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
using Asp.Versioning;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Umbraco.Cms.Api.Management.Factories;
|
||||
using Umbraco.Cms.Api.Management.ViewModels.PublicAccess;
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Core.Services.OperationStatus;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.Controllers.Document;
|
||||
|
||||
public class GetPublicAccessDocumentController : DocumentControllerBase
|
||||
{
|
||||
private readonly IPublicAccessService _publicAccessService;
|
||||
private readonly IPublicAccessPresentationFactory _publicAccessPresentationFactory;
|
||||
|
||||
public GetPublicAccessDocumentController(
|
||||
IPublicAccessService publicAccessService,
|
||||
IPublicAccessPresentationFactory publicAccessPresentationFactory)
|
||||
{
|
||||
_publicAccessService = publicAccessService;
|
||||
_publicAccessPresentationFactory = publicAccessPresentationFactory;
|
||||
}
|
||||
|
||||
[MapToApiVersion("1.0")]
|
||||
[HttpGet("{id:guid}/public-access")]
|
||||
public async Task<IActionResult> GetPublicAccess(Guid id)
|
||||
{
|
||||
Attempt<PublicAccessEntry?, PublicAccessOperationStatus> accessAttempt =
|
||||
await _publicAccessService.GetEntryByContentKeyAsync(id);
|
||||
|
||||
if (accessAttempt.Success is false)
|
||||
{
|
||||
return PublicAccessOperationStatusResult(accessAttempt.Status);
|
||||
}
|
||||
|
||||
Attempt<PublicAccessResponseModel?, PublicAccessOperationStatus> responseModelAttempt =
|
||||
_publicAccessPresentationFactory.CreatePublicAccessResponseModel(accessAttempt.Result!);
|
||||
|
||||
if (responseModelAttempt.Success is false)
|
||||
{
|
||||
return PublicAccessOperationStatusResult(responseModelAttempt.Status);
|
||||
}
|
||||
|
||||
return Ok(responseModelAttempt.Result);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
using Asp.Versioning;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Umbraco.Cms.Api.Management.Factories;
|
||||
using Umbraco.Cms.Api.Management.ViewModels.PublicAccess;
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Core.Services.OperationStatus;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.Controllers.Document;
|
||||
|
||||
public class UpdatePublicAccessDocumentController : DocumentControllerBase
|
||||
{
|
||||
private readonly IPublicAccessPresentationFactory _publicAccessPresentationFactory;
|
||||
private readonly IPublicAccessService _publicAccessService;
|
||||
|
||||
public UpdatePublicAccessDocumentController(
|
||||
IPublicAccessPresentationFactory publicAccessPresentationFactory,
|
||||
IPublicAccessService publicAccessService)
|
||||
{
|
||||
_publicAccessPresentationFactory = publicAccessPresentationFactory;
|
||||
_publicAccessService = publicAccessService;
|
||||
}
|
||||
|
||||
[HttpPut("{id:guid}/public-access")]
|
||||
[MapToApiVersion("1.0")]
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||
public async Task<IActionResult> Update(Guid id, PublicAccessRequestModel requestModel)
|
||||
{
|
||||
PublicAccessEntrySlim publicAccessEntrySlim = _publicAccessPresentationFactory.CreatePublicAccessEntrySlim(requestModel, id);
|
||||
|
||||
Attempt<PublicAccessEntry?, PublicAccessOperationStatus> updateAttempt = await _publicAccessService.UpdateAsync(publicAccessEntrySlim);
|
||||
|
||||
return updateAttempt.Success
|
||||
? Ok()
|
||||
: PublicAccessOperationStatusResult(updateAttempt.Status);
|
||||
}
|
||||
}
|
||||
@@ -24,11 +24,11 @@ public class ItemMemberGroupItemController : MemberGroupItemControllerBase
|
||||
|
||||
[HttpGet("item")]
|
||||
[MapToApiVersion("1.0")]
|
||||
[ProducesResponseType(typeof(IEnumerable<MemberGroupItemReponseModel>), StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(typeof(IEnumerable<MemberGroupItemResponseModel>), StatusCodes.Status200OK)]
|
||||
public async Task<IActionResult> Item([FromQuery(Name = "id")] HashSet<Guid> ids)
|
||||
{
|
||||
IEnumerable<IEntitySlim> memberGroups = _entityService.GetAll(UmbracoObjectTypes.MemberGroup, ids.ToArray());
|
||||
List<MemberGroupItemReponseModel> responseModel = _mapper.MapEnumerable<IEntitySlim, MemberGroupItemReponseModel>(memberGroups);
|
||||
List<MemberGroupItemResponseModel> responseModel = _mapper.MapEnumerable<IEntitySlim, MemberGroupItemResponseModel>(memberGroups);
|
||||
return Ok(responseModel);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user