Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Api.Management.ViewModels;
using Umbraco.Cms.Api.Management.ViewModels.DataType;
using Umbraco.Cms.Core.Mapping;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Services;

namespace Umbraco.Cms.Api.Management.Controllers.DataType;

/// <summary>
/// Provides an API controller for retrieving the full details for multiple data types by key.
/// </summary>
[ApiVersion("1.0")]
public class FetchDataTypesController : DataTypeControllerBase
{
private readonly IDataTypeService _dataTypeService;
private readonly IUmbracoMapper _umbracoMapper;

/// <summary>
/// Initializes a new instance of the <see cref="FetchDataTypesController"/> class.
/// </summary>
/// <param name="dataTypeService">The data type service.</param>
/// <param name="umbracoMapper">The presentation model mapper.</param>
public FetchDataTypesController(IDataTypeService dataTypeService, IUmbracoMapper umbracoMapper)
{
_dataTypeService = dataTypeService;
_umbracoMapper = umbracoMapper;
}

[HttpPost("fetch")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(FetchResponseModel<DataTypeResponseModel>), StatusCodes.Status200OK)]
public async Task<IActionResult> Fetch(CancellationToken cancellationToken, FetchRequestModel requestModel)
{
Guid[] ids = [.. requestModel.Ids.Select(x => x.Id).Distinct()];

if (ids.Length == 0)
{
return Ok(new FetchResponseModel<DataTypeResponseModel>());
}

IEnumerable<IDataType> dataTypes = await _dataTypeService.GetAllAsync(ids);

List<IDataType> ordered = OrderByRequestedIds(dataTypes, ids);

var responseModels = ordered.Select(dt => _umbracoMapper.Map<DataTypeResponseModel>(dt)!).ToList();

return Ok(new FetchResponseModel<DataTypeResponseModel>
{
Total = responseModels.Count,
Items = responseModels,
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Api.Management.ViewModels;
using Umbraco.Cms.Api.Management.ViewModels.DocumentType;
using Umbraco.Cms.Core.Mapping;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Services;

namespace Umbraco.Cms.Api.Management.Controllers.DocumentType;

/// <summary>
/// Provides an API controller for retrieving the full details for multiple document types by key.
/// </summary>
[ApiVersion("1.0")]
public class FetchDocumentTypesController : DocumentTypeControllerBase
{
private readonly IContentTypeService _contentTypeService;
private readonly IUmbracoMapper _umbracoMapper;

/// <summary>
/// Initializes a new instance of the <see cref="FetchDocumentTypesController"/> class.
/// </summary>
/// <param name="contentTypeService">The content type service.</param>
/// <param name="umbracoMapper">The presentation model mapper.</param>
public FetchDocumentTypesController(IContentTypeService contentTypeService, IUmbracoMapper umbracoMapper)
{
_contentTypeService = contentTypeService;
_umbracoMapper = umbracoMapper;
}

[HttpPost("fetch")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(FetchResponseModel<DocumentTypeResponseModel>), StatusCodes.Status200OK)]
public async Task<IActionResult> Fetch(CancellationToken cancellationToken, FetchRequestModel requestModel)
{
Guid[] ids = [.. requestModel.Ids.Select(x => x.Id).Distinct()];

if (ids.Length == 0)
{
return Ok(new FetchResponseModel<DocumentTypeResponseModel>());
}

IEnumerable<IContentType> contentTypes = _contentTypeService.GetMany(ids);

List<IContentType> ordered = OrderByRequestedIds(contentTypes, ids);

var responseModels = ordered.Select(ct => _umbracoMapper.Map<DocumentTypeResponseModel>(ct)!).ToList();

return Ok(new FetchResponseModel<DocumentTypeResponseModel>
{
Total = responseModels.Count,
Items = responseModels,
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using Umbraco.Cms.Api.Management.Filters;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Features;
using Umbraco.Cms.Core.Models.Entities;
using Umbraco.Cms.Core.Models.Membership;
using Umbraco.Cms.Core.Security;
using Umbraco.Cms.Web.Common.Authorization;
Expand Down Expand Up @@ -74,4 +75,15 @@ protected BadRequestObjectResult SkipTakeToPagingProblem() =>
Status = StatusCodes.Status400BadRequest,
Type = "Error",
});

/// <summary>
/// Orders entities to match the order of the requested IDs.
/// </summary>
/// <typeparam name="TEntity">The entity type.</typeparam>
/// <param name="entities">The entities to order.</param>
/// <param name="requestedIds">The requested IDs in the desired order.</param>
/// <returns>A list of entities ordered by the requested IDs.</returns>
protected static List<TEntity> OrderByRequestedIds<TEntity>(IEnumerable<TEntity> entities, Guid[] requestedIds)
where TEntity : IEntity
=> entities.OrderBy(e => Array.IndexOf(requestedIds, e.Key)).ToList();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Api.Management.ViewModels;
using Umbraco.Cms.Api.Management.ViewModels.MediaType;
using Umbraco.Cms.Core.Mapping;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Services;

namespace Umbraco.Cms.Api.Management.Controllers.MediaType;

/// <summary>
/// Provides an API controller for retrieving the full details for multiple media types by key.
/// </summary>
[ApiVersion("1.0")]
public class FetchMediaTypesController : MediaTypeControllerBase
{
private readonly IMediaTypeService _mediaTypeService;
private readonly IUmbracoMapper _umbracoMapper;

/// <summary>
/// Initializes a new instance of the <see cref="FetchMediaTypesController"/> class.
/// </summary>
/// <param name="mediaTypeService">The media type service.</param>
/// <param name="umbracoMapper">The presentation model mapper.</param>
public FetchMediaTypesController(IMediaTypeService mediaTypeService, IUmbracoMapper umbracoMapper)
{
_mediaTypeService = mediaTypeService;
_umbracoMapper = umbracoMapper;
}

[HttpPost("fetch")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(FetchResponseModel<MediaTypeResponseModel>), StatusCodes.Status200OK)]
public async Task<IActionResult> Fetch(CancellationToken cancellationToken, FetchRequestModel requestModel)
{
Guid[] ids = [.. requestModel.Ids.Select(x => x.Id).Distinct()];

if (ids.Length == 0)
{
return Ok(new FetchResponseModel<MediaTypeResponseModel>());
}

IEnumerable<IMediaType> mediaTypes = _mediaTypeService.GetMany(ids);

List<IMediaType> ordered = OrderByRequestedIds(mediaTypes, ids);

var responseModels = ordered.Select(mt => _umbracoMapper.Map<MediaTypeResponseModel>(mt)!).ToList();

return Ok(new FetchResponseModel<MediaTypeResponseModel>
{
Total = responseModels.Count,
Items = responseModels,
});
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Asp.Versioning;
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Api.Management.Factories;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Api.Management.Factories;
using Umbraco.Cms.Api.Management.ViewModels;
using Umbraco.Cms.Api.Management.ViewModels.MemberType;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Services;

namespace Umbraco.Cms.Api.Management.Controllers.MemberType;

/// <summary>
/// Provides an API controller for retrieving the full details for multiple member types by key.
/// </summary>
[ApiVersion("1.0")]
public class FetchMemberTypesController : MemberTypeControllerBase
{
private readonly IMemberTypeService _memberTypeService;
private readonly IMemberTypePresentationFactory _memberTypePresentationFactory;

/// <summary>
/// Initializes a new instance of the <see cref="FetchMemberTypesController"/> class.
/// </summary>
/// <param name="memberTypeService">The member type service.</param>
/// <param name="memberTypePresentationFactory">The member type presentation factory.</param>
public FetchMemberTypesController(IMemberTypeService memberTypeService, IMemberTypePresentationFactory memberTypePresentationFactory)
{
_memberTypeService = memberTypeService;
_memberTypePresentationFactory = memberTypePresentationFactory;
}

[HttpPost("fetch")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(FetchResponseModel<MemberTypeResponseModel>), StatusCodes.Status200OK)]
public async Task<IActionResult> Fetch(CancellationToken cancellationToken, FetchRequestModel requestModel)
{
Guid[] ids = [.. requestModel.Ids.Select(x => x.Id).Distinct()];

if (ids.Length == 0)
{
return Ok(new FetchResponseModel<MemberTypeResponseModel>());
}

IEnumerable<IMemberType> memberTypes = _memberTypeService.GetMany(ids);

List<IMemberType> ordered = OrderByRequestedIds(memberTypes, ids);

// Member type mapping is async via factory.
IEnumerable<Task<MemberTypeResponseModel>> mappingTasks = ordered.Select(mt => _memberTypePresentationFactory.CreateResponseModelAsync(mt));
MemberTypeResponseModel[] responseModels = await Task.WhenAll(mappingTasks);

return Ok(new FetchResponseModel<MemberTypeResponseModel>
{
Total = responseModels.Length,
Items = responseModels,
});
}
}
Loading
Loading