using AutoMapper; using AutoMapper.Configuration; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace OnlyPrompt.Backend.Utils { public static class AutomapperExtensions { public static IMappingExpression CreateUpdateMap(this IMapperConfigurationExpression cfg, MemberList memberList = MemberList.Source) { return cfg.CreateMap(memberList) .IgnoreNullMembers(); } public static IMappingExpression MapMemberFrom(this IMappingExpression mapping, Expression> destinationMember, Expression> sourceMember) { mapping.ForMember(destinationMember, x => x.MapFrom(sourceMember)); return mapping; } public static IMappingExpression IgnoreNullMembers(this IMappingExpression mapping) { mapping.ForAllMembers(opts => opts.Condition((src, dest, member) => src != null)); return mapping; } public static IMappingExpression MapCtorParamFrom(this IMappingExpression mapping, Expression> destinationMember, Expression> sourceMember) { mapping.ForCtorParam(destinationMember, x => x.MapFrom(sourceMember)); return mapping; } public static IMappingExpression ForCtorParam(this IMappingExpression mapping, Expression> paramSelector, Action> configure) { var ctorParamName = ((MemberExpression)paramSelector.Body).Member.Name; mapping.ForCtorParam(ctorParamName, configure); return mapping; } } }