Map new properties from database to back-office models

This commit is contained in:
Ronald Barendse
2021-06-15 13:22:19 +02:00
parent f7f22dda42
commit c53c7d1fb4
7 changed files with 98 additions and 24 deletions

View File

@@ -14,7 +14,10 @@ namespace Umbraco.Core.Models
[DebuggerDisplay("Id: {Id}, Name: {Name}")]
public class PropertyGroup : EntityBase, IEquatable<PropertyGroup>
{
private Guid? _parentKey;
private short _level;
private string _name;
private string _icon;
private int _sortOrder;
private PropertyTypeCollection _propertyTypes;
@@ -32,6 +35,26 @@ namespace Umbraco.Core.Models
OnPropertyChanged(nameof(PropertyTypes));
}
/// <summary>
/// Gets or sets the parent key of the group.
/// </summary>
[DataMember]
public Guid? ParentKey
{
get => _parentKey;
set => SetPropertyValueAndDetectChanges(value, ref _parentKey, nameof(ParentKey));
}
/// <summary>
/// Gets or sets the Sort Order of the Group
/// </summary>
[DataMember]
public short Level
{
get => _level;
set => SetPropertyValueAndDetectChanges(value, ref _level, nameof(Level));
}
/// <summary>
/// Gets or sets the Name of the Group, which corresponds to the Tab-name in the UI
/// </summary>
@@ -42,6 +65,16 @@ namespace Umbraco.Core.Models
set => SetPropertyValueAndDetectChanges(value, ref _name, nameof(Name));
}
/// <summary>
/// Gets or sets the icon of the group.
/// </summary>
[DataMember]
public string Icon
{
get => _icon;
set => SetPropertyValueAndDetectChanges(value, ref _icon, nameof(Icon));
}
/// <summary>
/// Gets or sets the Sort Order of the Group
/// </summary>
@@ -82,18 +115,9 @@ namespace Umbraco.Core.Models
}
}
public bool Equals(PropertyGroup other)
{
if (base.Equals(other)) return true;
return other != null && Name.InvariantEquals(other.Name);
}
public bool Equals(PropertyGroup other) => other != null && base.Equals(other) && ParentKey == other.ParentKey && Level == other.Level && Icon == other.Icon && Name.InvariantEquals(other.Name);
public override int GetHashCode()
{
var baseHash = base.GetHashCode();
var nameHash = Name.ToLowerInvariant().GetHashCode();
return baseHash ^ nameHash;
}
public override int GetHashCode() => (base.GetHashCode(), ParentKey, Level, Icon, Name.ToLowerInvariant()).GetHashCode();
protected override void PerformDeepClone(object clone)
{

View File

@@ -34,10 +34,14 @@ namespace Umbraco.Core.Persistence.Factories
if (groupDto.ContentTypeNodeId == contentTypeId)
group.Id = groupDto.Id;
group.Key = groupDto.UniqueId;
group.ParentKey = groupDto.ParentKey;
group.Level = groupDto.Level;
group.Icon = groupDto.Icon;
group.Name = groupDto.Text;
group.SortOrder = groupDto.SortOrder;
group.PropertyTypes = new PropertyTypeCollection(isPublishing);
group.Key = groupDto.UniqueId;
//Because we are likely to have a group with no PropertyTypes we need to ensure that these are excluded
var typeDtos = groupDto.PropertyTypeDtos.Where(x => x.Id > 0);
@@ -103,10 +107,13 @@ namespace Umbraco.Core.Persistence.Factories
{
var dto = new PropertyTypeGroupDto
{
UniqueId = propertyGroup.Key,
ParentKey = propertyGroup.ParentKey,
Level = propertyGroup.Level,
ContentTypeNodeId = contentTypeId,
SortOrder = propertyGroup.SortOrder,
Icon = propertyGroup.Icon,
Text = propertyGroup.Name,
UniqueId = propertyGroup.Key
SortOrder = propertyGroup.SortOrder
};
if (propertyGroup.HasIdentity)

View File

@@ -20,8 +20,11 @@ namespace Umbraco.Core.Persistence.Mappers
{
DefineMap<PropertyGroup, PropertyTypeGroupDto>(nameof(PropertyGroup.Id), nameof(PropertyTypeGroupDto.Id));
DefineMap<PropertyGroup, PropertyTypeGroupDto>(nameof(PropertyGroup.Key), nameof(PropertyTypeGroupDto.UniqueId));
DefineMap<PropertyGroup, PropertyTypeGroupDto>(nameof(PropertyGroup.SortOrder), nameof(PropertyTypeGroupDto.SortOrder));
DefineMap<PropertyGroup, PropertyTypeGroupDto>(nameof(PropertyGroup.ParentKey), nameof(PropertyTypeGroupDto.ParentKey));
DefineMap<PropertyGroup, PropertyTypeGroupDto>(nameof(PropertyGroup.Level), nameof(PropertyTypeGroupDto.Level));
DefineMap<PropertyGroup, PropertyTypeGroupDto>(nameof(PropertyGroup.Icon), nameof(PropertyTypeGroupDto.Icon));
DefineMap<PropertyGroup, PropertyTypeGroupDto>(nameof(PropertyGroup.Name), nameof(PropertyTypeGroupDto.Text));
DefineMap<PropertyGroup, PropertyTypeGroupDto>(nameof(PropertyGroup.SortOrder), nameof(PropertyTypeGroupDto.SortOrder));
}
}
}

View File

@@ -272,9 +272,12 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
return new PropertyGroup(new PropertyTypeCollection(isPublishing))
{
Id = dto.Id,
Key = dto.UniqueId,
ParentKey = dto.ParentKey,
Level = dto.Level,
Icon = dto.Icon,
Name = dto.Text,
SortOrder = dto.SortOrder,
Key = dto.UniqueId
SortOrder = dto.SortOrder
};
}

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Runtime.Serialization;
@@ -32,12 +33,24 @@ namespace Umbraco.Web.Models.ContentEditing
[DataMember(Name = "id")]
public int Id { get; set; }
[DataMember(Name = "sortOrder")]
public int SortOrder { get; set; }
[DataMember(Name = "key")]
public Guid Key { get; set; }
[DataMember(Name = "parentKey")]
public Guid? ParentKey { get; set; }
[DataMember(Name = "level")]
public short Level { get; set; }
[DataMember(Name = "icon")]
public string Icon { get; set; }
[Required]
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "sortOrder")]
public int SortOrder { get; set; }
}
[DataContract(Name = "propertyGroup", Namespace = "")]

View File

@@ -300,6 +300,11 @@ namespace Umbraco.Web.Models.Mapping
{
if (source.Id > 0)
target.Id = source.Id;
target.Key = source.Key;
target.ParentKey = source.ParentKey;
target.Level = source.Level;
target.Icon = source.Icon;
target.Name = source.Name;
target.SortOrder = source.SortOrder;
}
@@ -309,6 +314,11 @@ namespace Umbraco.Web.Models.Mapping
{
if (source.Id > 0)
target.Id = source.Id;
target.Key = source.Key;
target.ParentKey = source.ParentKey;
target.Level = source.Level;
target.Icon = source.Icon;
target.Name = source.Name;
target.SortOrder = source.SortOrder;
}
@@ -319,10 +329,14 @@ namespace Umbraco.Web.Models.Mapping
if (source.Id > 0)
target.Id = source.Id;
target.Inherited = source.Inherited;
target.Key = source.Key;
target.ParentKey = source.ParentKey;
target.Level = source.Level;
target.Icon = source.Icon;
target.Name = source.Name;
target.SortOrder = source.SortOrder;
target.Inherited = source.Inherited;
target.Properties = context.MapEnumerable<PropertyTypeBasic, PropertyTypeDisplay>(source.Properties);
}
@@ -332,10 +346,14 @@ namespace Umbraco.Web.Models.Mapping
if (source.Id > 0)
target.Id = source.Id;
target.Inherited = source.Inherited;
target.Key = source.Key;
target.ParentKey = source.ParentKey;
target.Level = source.Level;
target.Icon = source.Icon;
target.Name = source.Name;
target.SortOrder = source.SortOrder;
target.Inherited = source.Inherited;
target.Properties = context.MapEnumerable<MemberPropertyTypeBasic, MemberPropertyTypeDisplay>(source.Properties);
}

View File

@@ -75,9 +75,12 @@ namespace Umbraco.Web.Models.Mapping
var group = new PropertyGroupDisplay<TPropertyType>
{
Id = tab.Id,
Inherited = false,
Key = tab.Key,
ParentKey = tab.ParentKey,
Level = tab.Level,
Name = tab.Name,
SortOrder = tab.SortOrder,
Inherited = false,
ContentTypeId = source.Id
};
@@ -100,9 +103,12 @@ namespace Umbraco.Web.Models.Mapping
var group = new PropertyGroupDisplay<TPropertyType>
{
Id = tab.Id,
Inherited = true,
Key = tab.Key,
ParentKey = tab.ParentKey,
Level = tab.Level,
Name = tab.Name,
SortOrder = tab.SortOrder,
Inherited = true,
ContentTypeId = definingContentType.Id,
ParentTabContentTypes = new[] { definingContentType.Id },
ParentTabContentTypeNames = new[] { definingContentType.Name }