using AutoMapper;
using xModels.Dtos;
using xCommons.Extensions;
using xIdentityService.Interfaces;
using xIdentityService.Extensions;
namespace xAiApi.AI.Mppings
{
///
/// an AutoMapper Value Resolver for Mapping TEntity to TDto
/// When TEntity Has OwnerId Property and Owner ...
///
///
///
public abstract class XBaseOwnerMappingResolver : IValueResolver
where TDto : class
where TEntity : class
{
//
private string destPropertyName = "Owner";
private string srcPropertyName = "OwnerId";
private readonly IXIdentityProvider identityProvider;
public XBaseOwnerMappingResolver(
IXIdentityProvider identityProvider
)
{
this.identityProvider = identityProvider;
}
public XPersonDto Resolve(
TEntity source,
TDto destination,
XPersonDto destMember,
ResolutionContext context
)
{
//
XPersonDto result = null;
//
// Check Source is not Null ...
if (source.IsNull())
{
return result;
}
//
// Check OwnerId Exists ...
var isOwnerExists = source.HasProperty(srcPropertyName);
if (!isOwnerExists)
{
return result;
}
//
// Retrieve OwnerId from Source ...
var ownerId = source.GetProperty(srcPropertyName);
isOwnerExists = !ownerId.IsNullOrEmpty();
if (!isOwnerExists)
{
return result;
}
//
// Retrieve Private Trusted Device ...
var device = identityProvider.GetDevice();
//
// Retrieve Specified OwnerId's UserInfo ...
var userInfo = identityProvider.GetUserInfo(
device: device,
userSelectByParam: ownerId
).RunTask();
//
// Check UserInfo Exists ...
if (!userInfo.IsNullOrDefault())
{
//
// Converts UserInfo to XPersonDto ...
result = userInfo.ToXPersonDto();
}
//
// Setting Dest Member ...
destMember = result;
//
// Setting Destination Property Value ...
destination.SetProperty(destPropertyName, result);
//
return result;
}
}
}