Members and member types in the Management API (#15662)
* Members and member types in the Management API * Add validation endpoints for members * Include validation result in service response + add unit tests * Regenerate OpenApi.json * Regenerate OpenApi.json after merge * Don't throw an exception when trying to set valid variation levels for member types * Added missing ProducesResponseType * Remove TODO, as that works * Allow creation of member with explicit key * Do not feature "parent" for member creation + add missing response type * Do not feature a "Folder" in create member type (folders are not supported) * Added missing build methods * Fixed issue with mapping --------- Co-authored-by: Bjarke Berg <mail@bergmania.dk>
This commit is contained in:
@@ -6,6 +6,4 @@ public abstract class CreateContentRequestModelBase<TValueModel, TVariantModel>
|
||||
where TVariantModel : VariantModelBase
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
|
||||
public ReferenceByIdModel? Parent { get; set; }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.Content;
|
||||
|
||||
public abstract class CreateContentWithParentRequestModelBase<TValueModel, TVariantModel>
|
||||
: CreateContentRequestModelBase<TValueModel, TVariantModel>
|
||||
where TValueModel : ValueModelBase
|
||||
where TVariantModel : VariantModelBase
|
||||
{
|
||||
public ReferenceByIdModel? Parent { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.ContentType;
|
||||
|
||||
public abstract class CreateContentTypeInFolderRequestModelBase<TPropertyType, TPropertyTypeContainer>
|
||||
: CreateContentTypeRequestModelBase<TPropertyType, TPropertyTypeContainer>
|
||||
where TPropertyType : PropertyTypeModelBase
|
||||
where TPropertyTypeContainer : PropertyTypeContainerModelBase
|
||||
{
|
||||
public ReferenceByIdModel? Folder { get; set; }
|
||||
}
|
||||
@@ -6,6 +6,4 @@ public abstract class CreateContentTypeRequestModelBase<TPropertyType, TProperty
|
||||
where TPropertyTypeContainer : PropertyTypeContainerModelBase
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
|
||||
public ReferenceByIdModel? Folder { get; set; }
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ using Umbraco.Cms.Api.Management.ViewModels.Content;
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.Document;
|
||||
|
||||
[ShortGenericSchemaName<DocumentValueModel, DocumentVariantRequestModel>("CreateContentForDocumentRequestModel")]
|
||||
public class CreateDocumentRequestModel : CreateContentRequestModelBase<DocumentValueModel, DocumentVariantRequestModel>
|
||||
public class CreateDocumentRequestModel : CreateContentWithParentRequestModelBase<DocumentValueModel, DocumentVariantRequestModel>
|
||||
{
|
||||
public required ReferenceByIdModel DocumentType { get; set; }
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ namespace Umbraco.Cms.Api.Management.ViewModels.DocumentType;
|
||||
|
||||
[ShortGenericSchemaName<CreateDocumentTypePropertyTypeRequestModel, CreateDocumentTypePropertyTypeContainerRequestModel>("CreateContentTypeForDocumentTypeRequestModel")]
|
||||
public class CreateDocumentTypeRequestModel
|
||||
: CreateContentTypeRequestModelBase<CreateDocumentTypePropertyTypeRequestModel, CreateDocumentTypePropertyTypeContainerRequestModel>
|
||||
: CreateContentTypeInFolderRequestModelBase<CreateDocumentTypePropertyTypeRequestModel, CreateDocumentTypePropertyTypeContainerRequestModel>
|
||||
{
|
||||
public IEnumerable<ReferenceByIdModel> AllowedTemplates { get; set; } = Enumerable.Empty<ReferenceByIdModel>();
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ using Umbraco.Cms.Api.Management.ViewModels.Content;
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.Media;
|
||||
|
||||
[ShortGenericSchemaName<MediaValueModel, MediaVariantRequestModel>("CreateContentForMediaRequestModel")]
|
||||
public class CreateMediaRequestModel : CreateContentRequestModelBase<MediaValueModel, MediaVariantRequestModel>
|
||||
public class CreateMediaRequestModel : CreateContentWithParentRequestModelBase<MediaValueModel, MediaVariantRequestModel>
|
||||
{
|
||||
public required ReferenceByIdModel MediaType { get; set; }
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ namespace Umbraco.Cms.Api.Management.ViewModels.MediaType;
|
||||
|
||||
[ShortGenericSchemaName<CreateMediaTypePropertyTypeRequestModel, CreateMediaTypePropertyTypeContainerRequestModel>("CreateContentTypeForMediaTypeRequestModel")]
|
||||
public class CreateMediaTypeRequestModel
|
||||
: CreateContentTypeRequestModelBase<CreateMediaTypePropertyTypeRequestModel, CreateMediaTypePropertyTypeContainerRequestModel>
|
||||
: CreateContentTypeInFolderRequestModelBase<CreateMediaTypePropertyTypeRequestModel, CreateMediaTypePropertyTypeContainerRequestModel>
|
||||
{
|
||||
public IEnumerable<MediaTypeSort> AllowedMediaTypes { get; set; } = Enumerable.Empty<MediaTypeSort>();
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
using Umbraco.Cms.Api.Common.Attributes;
|
||||
using Umbraco.Cms.Api.Management.ViewModels.Content;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.Member;
|
||||
|
||||
[ShortGenericSchemaName<MemberValueModel, MemberVariantRequestModel>("CreateContentForMemberRequestModel")]
|
||||
public class CreateMemberRequestModel : CreateContentRequestModelBase<MemberValueModel, MemberVariantRequestModel>
|
||||
{
|
||||
public string Email { get; set; } = string.Empty;
|
||||
|
||||
public string Username { get; set; } = string.Empty;
|
||||
|
||||
public string Password { get; set; } = string.Empty;
|
||||
|
||||
public required ReferenceByIdModel MemberType { get; set; }
|
||||
|
||||
public IEnumerable<string>? Groups { get; set; }
|
||||
|
||||
public bool IsApproved { get; set; }
|
||||
}
|
||||
@@ -1,8 +1,12 @@
|
||||
using Umbraco.Cms.Api.Management.ViewModels.Item;
|
||||
using Umbraco.Cms.Api.Management.ViewModels.Content;
|
||||
using Umbraco.Cms.Api.Management.ViewModels.Item;
|
||||
using Umbraco.Cms.Api.Management.ViewModels.MemberType;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.Member.Item;
|
||||
|
||||
public class MemberItemResponseModel : NamedItemResponseModelBase
|
||||
{
|
||||
public string? Icon { get; set; }
|
||||
public MemberTypeReferenceResponseModel MemberType { get; set; } = new();
|
||||
|
||||
public IEnumerable<VariantItemResponseModel> Variants { get; set; } = Enumerable.Empty<VariantItemResponseModel>();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
using Umbraco.Cms.Api.Common.Attributes;
|
||||
using Umbraco.Cms.Api.Management.ViewModels.Content;
|
||||
using Umbraco.Cms.Api.Management.ViewModels.MemberType;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.Member;
|
||||
|
||||
[ShortGenericSchemaName<MemberValueModel, MemberVariantResponseModel>("ContentForMemberResponseModel")]
|
||||
public class MemberResponseModel : ContentResponseModelBase<MemberValueModel, MemberVariantResponseModel>
|
||||
{
|
||||
public string Email { get; set; } = string.Empty;
|
||||
|
||||
public string Username { get; set; } = string.Empty;
|
||||
|
||||
public MemberTypeReferenceResponseModel MemberType { get; set; } = new();
|
||||
|
||||
public bool IsApproved { get; set; }
|
||||
|
||||
public bool IsLockedOut { get; set; }
|
||||
|
||||
public bool IsTwoFactorEnabled { get; set; }
|
||||
|
||||
public int FailedPasswordAttempts { get; set; }
|
||||
|
||||
public DateTime? LastLoginDate { get; set; }
|
||||
|
||||
public DateTime? LastLockoutDate { get; set; }
|
||||
|
||||
public DateTime? LastPasswordChangeDate { get; set; }
|
||||
|
||||
public IEnumerable<string> Groups { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Umbraco.Cms.Api.Management.ViewModels.Content;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.Member;
|
||||
|
||||
public class MemberValueModel : ValueModelBase
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Umbraco.Cms.Api.Management.ViewModels.Content;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.Member;
|
||||
|
||||
public class MemberVariantRequestModel : VariantModelBase
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Umbraco.Cms.Api.Management.ViewModels.Content;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.Member;
|
||||
|
||||
public class MemberVariantResponseModel : VariantResponseModelBase
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using Umbraco.Cms.Api.Common.Attributes;
|
||||
using Umbraco.Cms.Api.Management.ViewModels.Content;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.Member;
|
||||
|
||||
[ShortGenericSchemaName<MemberValueModel, MemberVariantRequestModel>("UpdateContentForMemberRequestModel")]
|
||||
public class UpdateMemberRequestModel : UpdateContentRequestModelBase<MemberValueModel, MemberVariantRequestModel>
|
||||
{
|
||||
public string Email { get; set; } = string.Empty;
|
||||
|
||||
public string Username { get; set; } = string.Empty;
|
||||
|
||||
public string? OldPassword { get; set; }
|
||||
|
||||
public string? NewPassword { get; set; }
|
||||
|
||||
public IEnumerable<string>? Groups { get; set; }
|
||||
|
||||
public bool IsApproved { get; set; }
|
||||
|
||||
public bool IsLockedOut { get; set; }
|
||||
|
||||
public bool IsTwoFactorEnabled { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Umbraco.Cms.Api.Management.ViewModels.ContentType;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.MemberType;
|
||||
|
||||
public class AvailableMemberTypeCompositionResponseModel : AvailableContentTypeCompositionResponseModelBase
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Umbraco.Cms.Api.Management.ViewModels.ContentType;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.MemberType;
|
||||
|
||||
public class CreateMemberTypePropertyTypeContainerRequestModel : PropertyTypeContainerModelBase
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Umbraco.Cms.Api.Management.ViewModels.ContentType;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.MemberType;
|
||||
|
||||
public class CreateMemberTypePropertyTypeRequestModel : PropertyTypeModelBase
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
using Umbraco.Cms.Api.Common.Attributes;
|
||||
using Umbraco.Cms.Api.Management.ViewModels.ContentType;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.MemberType;
|
||||
|
||||
[ShortGenericSchemaName<CreateMemberTypePropertyTypeRequestModel, CreateMemberTypePropertyTypeContainerRequestModel>("CreateContentTypeForMemberTypeRequestModel")]
|
||||
public class CreateMemberTypeRequestModel
|
||||
: CreateContentTypeRequestModelBase<CreateMemberTypePropertyTypeRequestModel, CreateMemberTypePropertyTypeContainerRequestModel>
|
||||
{
|
||||
public IEnumerable<MemberTypeComposition> Compositions { get; set; } = Enumerable.Empty<MemberTypeComposition>();
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using Umbraco.Cms.Api.Management.ViewModels.ContentType;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.MemberType;
|
||||
|
||||
public class MemberTypeComposition
|
||||
{
|
||||
public required ReferenceByIdModel MemberType { get; init; }
|
||||
|
||||
public required CompositionType CompositionType { get; init; }
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Umbraco.Cms.Api.Management.ViewModels.ContentType;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.MemberType;
|
||||
|
||||
public class MemberTypeCompositionRequestModel : ContentTypeCompositionRequestModelBase
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Umbraco.Cms.Api.Management.ViewModels.ContentType;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.MemberType;
|
||||
|
||||
public class MemberTypeCompositionResponseModel : ContentTypeCompositionResponseModelBase
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Umbraco.Cms.Api.Management.ViewModels.ContentType;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.MemberType;
|
||||
|
||||
public class MemberTypePropertyTypeContainerResponseModel : PropertyTypeContainerModelBase
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Umbraco.Cms.Api.Management.ViewModels.ContentType;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.MemberType;
|
||||
|
||||
public class MemberTypePropertyTypeResponseModel : PropertyTypeModelBase
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Umbraco.Cms.Api.Management.ViewModels.ContentType;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.MemberType;
|
||||
|
||||
public class MemberTypeReferenceResponseModel : ContentTypeReferenceResponseModelBase
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using Umbraco.Cms.Api.Common.Attributes;
|
||||
using Umbraco.Cms.Api.Management.ViewModels.ContentType;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.MemberType;
|
||||
|
||||
[ShortGenericSchemaName<MemberTypePropertyTypeResponseModel, MemberTypePropertyTypeContainerResponseModel>("ContentTypeForMemberTypeResponseModel")]
|
||||
public class MemberTypeResponseModel : ContentTypeResponseModelBase<MemberTypePropertyTypeResponseModel, MemberTypePropertyTypeContainerResponseModel>
|
||||
{
|
||||
public IEnumerable<MemberTypeComposition> Compositions { get; set; } = Enumerable.Empty<MemberTypeComposition>();
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Umbraco.Cms.Api.Management.ViewModels.ContentType;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.MemberType;
|
||||
|
||||
public class UpdateMemberTypePropertyTypeContainerRequestModel : PropertyTypeContainerModelBase
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Umbraco.Cms.Api.Management.ViewModels.ContentType;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.MemberType;
|
||||
|
||||
public class UpdateMemberTypePropertyTypeRequestModel : PropertyTypeModelBase
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
using Umbraco.Cms.Api.Common.Attributes;
|
||||
using Umbraco.Cms.Api.Management.ViewModels.ContentType;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.ViewModels.MemberType;
|
||||
|
||||
[ShortGenericSchemaName<UpdateMemberTypePropertyTypeRequestModel, UpdateMemberTypePropertyTypeContainerRequestModel>("UpdateContentTypeForMemberTypeRequestModel")]
|
||||
public class UpdateMemberTypeRequestModel
|
||||
: UpdateContentTypeRequestModelBase<UpdateMemberTypePropertyTypeRequestModel, UpdateMemberTypePropertyTypeContainerRequestModel>
|
||||
{
|
||||
public IEnumerable<MemberTypeComposition> Compositions { get; set; } = Enumerable.Empty<MemberTypeComposition>();
|
||||
}
|
||||
Reference in New Issue
Block a user