Skip to content

Commit f0cf470

Browse files
bjarnefgeorgebidnul800sebastiaan
authored
Member type container in management API (#16914)
* Member type container in management API * Fix naming * Update service * Fix services * Register IMemberTypeContainerService in DI container Added a new service registration for `IMemberTypeContainerService` in the `AddCoreServices` method of `UmbracoBuilder.cs`. * Replace auditRepository with auditService in constructor * Add MemberTypeContainer to UdiEntityType mapping --------- Co-authored-by: georgebid <[email protected]> Co-authored-by: Sebastiaan Janssen <[email protected]>
1 parent 0cf8279 commit f0cf470

13 files changed

+223
-23
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using Asp.Versioning;
2+
using Microsoft.AspNetCore.Http;
3+
using Microsoft.AspNetCore.Mvc;
4+
using Umbraco.Cms.Api.Management.ViewModels.Folder;
5+
using Umbraco.Cms.Core.Security;
6+
using Umbraco.Cms.Core.Services;
7+
8+
namespace Umbraco.Cms.Api.Management.Controllers.MemberType.Folder;
9+
10+
[ApiVersion("1.0")]
11+
public class ByKeyMemberTypeFolderController : MemberTypeFolderControllerBase
12+
{
13+
public ByKeyMemberTypeFolderController(
14+
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
15+
IMemberTypeContainerService memberTypeContainerService)
16+
: base(backOfficeSecurityAccessor, memberTypeContainerService)
17+
{
18+
}
19+
20+
[HttpGet("{id:guid}")]
21+
[MapToApiVersion("1.0")]
22+
[ProducesResponseType(typeof(FolderResponseModel), StatusCodes.Status200OK)]
23+
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
24+
public async Task<IActionResult> ByKey(CancellationToken cancellationToken, Guid id) => await GetFolderAsync(id);
25+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using Asp.Versioning;
2+
using Microsoft.AspNetCore.Http;
3+
using Microsoft.AspNetCore.Mvc;
4+
using Umbraco.Cms.Api.Management.ViewModels.Folder;
5+
using Umbraco.Cms.Core.Security;
6+
using Umbraco.Cms.Core.Services;
7+
8+
namespace Umbraco.Cms.Api.Management.Controllers.MemberType.Folder;
9+
10+
[ApiVersion("1.0")]
11+
public class CreateMemberTypeFolderController : MemberTypeFolderControllerBase
12+
{
13+
public CreateMemberTypeFolderController(
14+
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
15+
IMemberTypeContainerService memberTypeContainerService)
16+
: base(backOfficeSecurityAccessor, memberTypeContainerService)
17+
{
18+
}
19+
20+
[HttpPost]
21+
[MapToApiVersion("1.0")]
22+
[ProducesResponseType(StatusCodes.Status201Created)]
23+
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
24+
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
25+
public async Task<IActionResult> Create(
26+
CancellationToken cancellationToken,
27+
CreateFolderRequestModel createFolderRequestModel)
28+
=> await CreateFolderAsync<ByKeyMemberTypeFolderController>(
29+
createFolderRequestModel,
30+
controller => nameof(controller.ByKey)).ConfigureAwait(false);
31+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using Asp.Versioning;
2+
using Microsoft.AspNetCore.Http;
3+
using Microsoft.AspNetCore.Mvc;
4+
using Umbraco.Cms.Core.Security;
5+
using Umbraco.Cms.Core.Services;
6+
7+
namespace Umbraco.Cms.Api.Management.Controllers.MemberType.Folder;
8+
9+
[ApiVersion("1.0")]
10+
public class DeleteMemberTypeFolderController : MemberTypeFolderControllerBase
11+
{
12+
public DeleteMemberTypeFolderController(
13+
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
14+
IMemberTypeContainerService memberTypeContainerService)
15+
: base(backOfficeSecurityAccessor, memberTypeContainerService)
16+
{
17+
}
18+
19+
[HttpDelete("{id:guid}")]
20+
[MapToApiVersion("1.0")]
21+
[ProducesResponseType(StatusCodes.Status200OK)]
22+
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
23+
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
24+
public async Task<IActionResult> Delete(CancellationToken cancellationToken, Guid id) => await DeleteFolderAsync(id);
25+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using Microsoft.AspNetCore.Authorization;
2+
using Microsoft.AspNetCore.Mvc;
3+
using Umbraco.Cms.Api.Management.Routing;
4+
using Umbraco.Cms.Core;
5+
using Umbraco.Cms.Core.Models;
6+
using Umbraco.Cms.Core.Security;
7+
using Umbraco.Cms.Core.Services;
8+
using Umbraco.Cms.Web.Common.Authorization;
9+
10+
namespace Umbraco.Cms.Api.Management.Controllers.MemberType.Folder;
11+
12+
[VersionedApiBackOfficeRoute($"{Constants.UdiEntityType.MemberType}/folder")]
13+
[ApiExplorerSettings(GroupName = "Member Type")]
14+
[Authorize(Policy = AuthorizationPolicies.TreeAccessMemberTypes)]
15+
public abstract class MemberTypeFolderControllerBase : FolderManagementControllerBase<IMemberType>
16+
{
17+
protected MemberTypeFolderControllerBase(
18+
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
19+
IMemberTypeContainerService memberTypeContainerService)
20+
: base(backOfficeSecurityAccessor, memberTypeContainerService)
21+
{
22+
}
23+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using Asp.Versioning;
2+
using Microsoft.AspNetCore.Http;
3+
using Microsoft.AspNetCore.Mvc;
4+
using Umbraco.Cms.Api.Management.ViewModels.Folder;
5+
using Umbraco.Cms.Core.Security;
6+
using Umbraco.Cms.Core.Services;
7+
8+
namespace Umbraco.Cms.Api.Management.Controllers.MemberType.Folder;
9+
10+
[ApiVersion("1.0")]
11+
public class UpdateMemberTypeFolderController : MemberTypeFolderControllerBase
12+
{
13+
public UpdateMemberTypeFolderController(
14+
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
15+
IMemberTypeContainerService memberTypeContainerService)
16+
: base(backOfficeSecurityAccessor, memberTypeContainerService)
17+
{
18+
}
19+
20+
[HttpPut("{id:guid}")]
21+
[MapToApiVersion("1.0")]
22+
[ProducesResponseType(StatusCodes.Status200OK)]
23+
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
24+
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
25+
public async Task<IActionResult> Update(
26+
CancellationToken cancellationToken,
27+
Guid id,
28+
UpdateFolderResponseModel updateFolderResponseModel)
29+
=> await UpdateFolderAsync(id, updateFolderResponseModel);
30+
}

src/Umbraco.Core/Constants-ObjectTypes.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ public static class ObjectTypes
1919

2020
public static readonly Guid MediaTypeContainer = new(Strings.MediaTypeContainer);
2121

22+
public static readonly Guid MemberTypeContainer = new(Strings.MemberTypeContainer);
23+
2224
public static readonly Guid DocumentBlueprintContainer = new(Strings.DocumentBlueprintContainer);
2325

2426
public static readonly Guid DataType = new(Strings.DataType);
@@ -75,6 +77,8 @@ public static class Strings
7577

7678
public const string MediaTypeContainer = "42AEF799-B288-4744-9B10-BE144B73CDC4";
7779

80+
public const string MemberTypeContainer = "59EF5767-7223-4ABC-B229-72821DC711B9";
81+
7882
public const string DocumentBlueprintContainer = "A7EFF71B-FA69-4552-93FC-038F7DEEE453";
7983

8084
public const string ContentItem = "10E2B09F-C28B-476D-B77A-AA686435E44A";

src/Umbraco.Core/Constants-UdiEntityType.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,27 @@ public static class UdiEntityType
1919

2020
// GUID entity types
2121
public const string AnyGuid = "any-guid"; // that one is for tests
22-
public const string DataType = "data-type";
23-
public const string DataTypeContainer = "data-type-container";
2422
public const string DictionaryItem = "dictionary-item";
2523
public const string Document = "document";
2624
public const string DocumentBlueprint = "document-blueprint";
2725
public const string DocumentBlueprintContainer = "document-blueprint-container";
2826
public const string DocumentType = "document-type";
2927
public const string DocumentTypeContainer = "document-type-container";
28+
29+
public const string MemberType = "member-type";
30+
public const string MemberTypeContainer = "member-type-container";
31+
public const string MemberGroup = "member-group";
32+
public const string Member = "member";
33+
34+
public const string DataType = "data-type";
35+
public const string DataTypeContainer = "data-type-container";
36+
3037
public const string Element = "element";
3138
public const string Media = "media";
3239
public const string MediaType = "media-type";
3340
public const string MediaTypeContainer = "media-type-container";
34-
public const string Member = "member";
35-
public const string MemberGroup = "member-group";
36-
public const string MemberType = "member-type";
3741
public const string Relation = "relation";
42+
3843
public const string RelationType = "relation-type";
3944
public const string Template = "template";
4045
public const string User = "user";

src/Umbraco.Core/DependencyInjection/UmbracoBuilder.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,7 @@ private void AddCoreServices()
329329
Services.AddUnique<IMemberTypeService, MemberTypeService>();
330330
Services.AddUnique<IMemberContentEditingService, MemberContentEditingService>();
331331
Services.AddUnique<IMemberTypeEditingService, MemberTypeEditingService>();
332+
Services.AddUnique<IMemberTypeContainerService, MemberTypeContainerService>();
332333
Services.AddUnique<INotificationService, NotificationService>();
333334
Services.AddUnique<ITrackedReferencesService, TrackedReferencesService>();
334335
Services.AddUnique<ITreeEntitySortingService, TreeEntitySortingService>();

src/Umbraco.Core/Models/UmbracoObjectTypes.cs

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,6 @@ public enum UmbracoObjectTypes
3535
[UmbracoUdiType(Constants.UdiEntityType.Media)]
3636
Media,
3737

38-
/// <summary>
39-
/// Member Type
40-
/// </summary>
41-
[UmbracoObjectType(Constants.ObjectTypes.Strings.MemberType, typeof(IMemberType))]
42-
[FriendlyName("Member Type")]
43-
[UmbracoUdiType(Constants.UdiEntityType.MemberType)]
44-
MemberType,
45-
4638
/// <summary>
4739
/// Template
4840
/// </summary>
@@ -52,12 +44,12 @@ public enum UmbracoObjectTypes
5244
Template,
5345

5446
/// <summary>
55-
/// Member Group
47+
/// Document Type
5648
/// </summary>
57-
[UmbracoObjectType(Constants.ObjectTypes.Strings.MemberGroup, typeof(IMemberGroup))]
58-
[FriendlyName("Member Group")]
59-
[UmbracoUdiType(Constants.UdiEntityType.MemberGroup)]
60-
MemberGroup,
49+
[UmbracoObjectType(Constants.ObjectTypes.Strings.DocumentType, typeof(IContentType))]
50+
[FriendlyName("Document Type")]
51+
[UmbracoUdiType(Constants.UdiEntityType.DocumentType)]
52+
DocumentType,
6153

6254
/// <summary>
6355
/// "Media Type
@@ -68,12 +60,20 @@ public enum UmbracoObjectTypes
6860
MediaType,
6961

7062
/// <summary>
71-
/// Document Type
63+
/// Member Type
7264
/// </summary>
73-
[UmbracoObjectType(Constants.ObjectTypes.Strings.DocumentType, typeof(IContentType))]
74-
[FriendlyName("Document Type")]
75-
[UmbracoUdiType(Constants.UdiEntityType.DocumentType)]
76-
DocumentType,
65+
[UmbracoObjectType(Constants.ObjectTypes.Strings.MemberType, typeof(IMemberType))]
66+
[FriendlyName("Member Type")]
67+
[UmbracoUdiType(Constants.UdiEntityType.MemberType)]
68+
MemberType,
69+
70+
/// <summary>
71+
/// Member Group
72+
/// </summary>
73+
[UmbracoObjectType(Constants.ObjectTypes.Strings.MemberGroup, typeof(IMemberGroup))]
74+
[FriendlyName("Member Group")]
75+
[UmbracoUdiType(Constants.UdiEntityType.MemberGroup)]
76+
MemberGroup,
7777

7878
/// <summary>
7979
/// Recycle Bin
@@ -114,6 +114,14 @@ public enum UmbracoObjectTypes
114114
[UmbracoUdiType(Constants.UdiEntityType.MediaTypeContainer)]
115115
MediaTypeContainer,
116116

117+
/// <summary>
118+
/// Member type container
119+
/// </summary>
120+
[UmbracoObjectType(Constants.ObjectTypes.Strings.MemberTypeContainer)]
121+
[FriendlyName("Member Type Container")]
122+
[UmbracoUdiType(Constants.UdiEntityType.MemberTypeContainer)]
123+
MemberTypeContainer,
124+
117125
/// <summary>
118126
/// Media type container
119127
/// </summary>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
using Umbraco.Cms.Core.Models;
2+
3+
namespace Umbraco.Cms.Core.Services;
4+
5+
public interface IMemberTypeContainerService : IEntityTypeContainerService<IMemberType>
6+
{
7+
}

0 commit comments

Comments
 (0)