using AutoMapper;
using DMS.Core.Models;
using DMS.Application.DTOs;
namespace DMS.Application.Profiles;
///
/// 配置AutoMapper的映射规则。
///
public class MappingProfile : Profile
{
public MappingProfile()
{
// Device 映射
CreateMap()
.ForMember(dest => dest.Id, opt => opt.Ignore())
.ForMember(dest => dest.VariableTables, opt => opt.Ignore());
CreateMap()
// 1. 首先,忽略那些永远不应从DTO更新的属性
.ForMember(dest => dest.Id, opt => opt.Ignore())
.ForMember(dest => dest.Description, opt => opt.Ignore())
.ForMember(dest => dest.VariableTables, opt => opt.Ignore())
.ForMember(dest => dest.CpuType, opt => opt.Ignore())
.ForMember(dest => dest.DeviceType, opt => opt.Ignore())
// 2. 然后,为每个可空属性单独设置条件
.ForMember(dest => dest.Name, opt => opt.Condition(src => src.Name != null))
.ForMember(dest => dest.Protocol, opt => opt.Condition(src => src.Protocol.HasValue))
.ForMember(dest => dest.IpAddress, opt => opt.Condition(src => src.IpAddress != null))
.ForMember(dest => dest.Port, opt => opt.Condition(src => src.Port.HasValue))
.ForMember(dest => dest.Rack, opt => opt.Condition(src => src.Rack.HasValue))
.ForMember(dest => dest.Slot, opt => opt.Condition(src => src.Slot.HasValue))
.ForMember(dest => dest.OpcUaServerUrl, opt => opt.Condition(src => src.OpcUaServerUrl != null))
.ForMember(dest => dest.IsActive, opt => opt.Condition(src => src.IsActive.HasValue));
CreateMap()
.ForMember(dest => dest.Protocol, opt => opt.MapFrom(src => src.Protocol.ToString()))
.ForMember(dest => dest.Status, opt => opt.Ignore());
// VariableTable 映射
CreateMap().ReverseMap();
// Variable 映射
CreateMap()
.ForMember(dest => dest.DataType, opt => opt.MapFrom(src => src.DataType.ToString()))
.ForMember(dest => dest.CSharpDataType, opt => opt.MapFrom(src => src.CSharpDataType))
.ForMember(dest => dest.S7Address, opt => opt.MapFrom(src => src.S7Address))
.ForMember(dest => dest.DataValue, opt => opt.MapFrom(src => src.DataValue))
.ForMember(dest => dest.DisplayValue, opt => opt.MapFrom(src => src.DisplayValue))
.ForMember(dest => dest.VariableTable, opt => opt.MapFrom(src => src.VariableTable))
.ForMember(dest => dest.MqttAliases, opt => opt.MapFrom(src => src.MqttAliases))
.ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.Description));
CreateMap()
.ForMember(dest => dest.S7Address, opt => opt.MapFrom(src => src.S7Address))
.ForMember(dest => dest.VariableTable, opt => opt.Ignore())
.ForMember(dest => dest.MqttAliases, opt => opt.Ignore())
.ForMember(dest => dest.DataValue, opt => opt.Ignore())
.ForMember(dest => dest.DisplayValue, opt => opt.Ignore())
.ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.Description));
// MqttServer 映射
CreateMap().ReverseMap();
// VariableMqttAlias 映射
CreateMap()
.ForMember(dest => dest.MqttServerName, opt => opt.Ignore())
.ReverseMap();
// VariableHistory 映射
CreateMap().ReverseMap();
// MenuBean 映射
CreateMap().ReverseMap();
// User 映射
CreateMap().ReverseMap();
}
}