Files
monorepo/LCU.Api.Internal.CoreApiWrapper/LCU.Library.Internal.CoreApiWrapperLib/DataAccess/PersonDao.cs
T
2026-03-31 14:32:23 -05:00

112 lines
5.8 KiB
C#

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using LCU.Library.Internal.CoreApiWrapperModel.CoreModels;
using LCU.Library.Internal.CoreApiWrapperLib.Utilities;
using LCU.Library.Internal.CoreApiWrapperLib.Configuration;
using LCU.Library.Internal.CoreApiWrapperLib.CoreApiUtilities;
using LCU.Library.Internal.CoreApiWrapperLib.CoreDbUtilities;
using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Persons;
using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.CoreRequests;
namespace LCU.Library.Internal.CoreApiWrapperLib.DataAccess
{
public class PersonDao : BaseCoreDao, IPersonDao
{
private const string PersonByNameLikeCount = "Person/PersonByNameLikeCount";
private const string PersonNumberByNameLikeQuery = "Person/PersonNumberByNameLikeQuery";
private readonly ICoreDbExecution _coreDbExecution;
private readonly CoreConfiguration _coreConfiguration;
private readonly CoreApiConfiguration _coreApiConfiguration;
public PersonDao(ICoreRequest coreRequest,
ICoreDbExecution coreDbExecution,
CoreConfiguration coreConfiguration)
: base(coreRequest)
{
_coreConfiguration = coreConfiguration;
_coreApiConfiguration = _coreConfiguration.CoreApiConfiguration;
_coreDbExecution = coreDbExecution;
}
/// <summary>
/// Calls Core API to search based on any or any number of the PersonNameRequest properties.
/// Default Included: Graph
/// </summary>
/// <param name="coreRequestParameters"></param>
/// <param name="personRequest"></param>
/// <returns>IEnumerable<Person></returns>
public async Task<IEnumerable<Person>> FindByPersonsName(CoreRequestParameters coreRequestParameters, PersonNameRequest personRequest)
{
var endpointParameters = HttpUtilities.BuildDictionaryOfNonNullValues(coreRequestParameters);
var jsonBody = HttpUtilities.BuildJsonOfNonNullProperties(personRequest);
var result = await _coreRequest.PostRequestObject<CoreApiMessage<IEnumerable<Person>>>(
_coreApiConfiguration.CoreEndPointConfiguration.PersonsQueryName,
endpointParameters,
jsonBody);
return result?.MessageBody;
}
/// <summary>
/// Calls Core API to search based on any or any number of the PersonSearchRequest properties.
/// Default Included: EmailAddresses, OrgRelationships, PersonInfo, PersonPhonesCard, PostalAddresses
/// </summary>
/// <param name="coreRequestParameters"></param>
/// <param name="personRequest"></param>
/// <returns>IEnumerable<Person></returns>
public async Task<IEnumerable<Person>> FindByPersonsSearch(CoreRequestParameters coreRequestParameters, PersonSearchRequest personRequest)
{
var endpointParameters = HttpUtilities.BuildDictionaryOfNonNullValues(coreRequestParameters);
var jsonBody = HttpUtilities.BuildJsonOfNonNullProperties(personRequest);
var result = await _coreRequest.PostRequestObject<CoreApiMessage<IEnumerable<Person>>>(_coreApiConfiguration.CoreEndPointConfiguration.PersonsQuerySearch,
endpointParameters,
jsonBody);
return result?.MessageBody;
}
/// <summary>
/// Calls Core API to search based on MemberAgreementNbrRequest property.
/// Default Included: Graph
/// </summary>
/// <param name="coreRequestParameters"></param>
/// <param name="personRequest"></param>
/// <returns>Person</returns>
public async Task<Person> FindByPersonMemberAgreementNbr(CoreRequestParameters coreRequestParameters, MemberNbrRequest personRequest)
{
var endpointParameters = HttpUtilities.BuildDictionaryOfNonNullValues(coreRequestParameters);
var jsonBody = HttpUtilities.BuildJsonOfNonNullProperties(personRequest);
var result = await _coreRequest.PostRequestObject<CoreApiMessage<Person>>(
_coreApiConfiguration.CoreEndPointConfiguration.PersonsQueryMemberAgreementNbr,
endpointParameters,
jsonBody);
return result?.MessageBody;
}
public async Task<IEnumerable<long>> GetPersonNumbersByNameLike(string firstName, string middleName, string lastName, int limit)
{
var query = QueryUtilities.GetQuery(PersonNumberByNameLikeQuery);
var queryParameters = new {
firstName = firstName?.ToLowerInvariant(),
middleName = middleName?.ToLowerInvariant(),
lastName = lastName?.ToLowerInvariant(),
limit
};
return await _coreDbExecution.ExecuteQuery<long, dynamic>(query, queryParameters);
}
public async Task<long> CountPersonsByNameLike(string firstName, string middleName, string lastName)
{
var query = QueryUtilities.GetQuery(PersonByNameLikeCount);
var queryParameters = new {
firstName = firstName?.ToLowerInvariant(),
middleName = middleName?.ToLowerInvariant(),
lastName = lastName?.ToLowerInvariant()
};
return (await _coreDbExecution.ExecuteQuery<long, dynamic>(query, queryParameters)).Single();
}
}
}