using System.Collections.Generic; using System.Linq; using LCU.Library.Internal.CoreApiWrapperLib.Configuration; using LCU.Library.Internal.CoreApiWrapperLib.CoreApiUtilities; using LCU.Library.Internal.CoreApiWrapperLib.Utilities; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.CoreRequests; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Organizations; using System.Threading.Tasks; using LCU.Library.Internal.CoreApiWrapperLib.CoreDbUtilities; namespace LCU.Library.Internal.CoreApiWrapperLib.DataAccess { public class OrganizationDao : BaseCoreDao, IOrganizationDao { private const string OrganizationByNameLikeCount = "Organization/OrganizationByNameLikeCount"; private const string OrganizationNumberByNameLikeQuery = "Organization/OrganizationNumberByNameLikeQuery"; private readonly CoreApiConfiguration _coreApiConfiguration; private readonly ICoreDbExecution _coreDb; public OrganizationDao ( ICoreRequest coreRequest, CoreConfiguration coreConfiguration, ICoreDbExecution coreDbExecution ) : base(coreRequest) { _coreApiConfiguration = coreConfiguration.CoreApiConfiguration; _coreDb = coreDbExecution; } /// /// Calls Core API to search based on any field in the OrganizationSearchRequest properties. /// /// /// /// IEnumerable public async Task> FindByOrganizationsSearch(CoreRequestParameters coreRequestParameters, OrganizationSearchRequest searchRequest) { var endpointParameters = HttpUtilities.BuildDictionaryOfNonNullValues(coreRequestParameters); var jsonBody = HttpUtilities.BuildJsonOfNonNullProperties(searchRequest); var result = await _coreRequest.PostRequestObject>>(_coreApiConfiguration.CoreEndPointConfiguration.OrganizationQuerySearch, endpointParameters, jsonBody); return result?.MessageBody; } /// /// Calls Core API to search based on MemberAgreementNbrRequest property. /// Default Included: Graph /// /// /// /// Organization public async Task FindOrganizationByMemberAgreeNbr(CoreRequestParameters coreRequestParameters, MemberNbrRequest organizationRequest) { var endpointParameters = HttpUtilities.BuildDictionaryOfNonNullValues(coreRequestParameters); var jsonBody = HttpUtilities.BuildJsonOfNonNullProperties(organizationRequest); var result = await _coreRequest.PostRequestObject>( _coreApiConfiguration.CoreEndPointConfiguration.OrganizationsQueryMemberAgreementNbr, endpointParameters, jsonBody); return result?.MessageBody; } public async Task CountOrganizationNumbersByName(string name) { var query = QueryUtilities.GetQuery(OrganizationByNameLikeCount); var queryParameters = new { organizationName = name.ToLowerInvariant() }; return (await _coreDb.ExecuteQuery(query, queryParameters)).Single(); } public async Task> FindOrganizationNumbersByNameSearch(string name, int limit) { var query = QueryUtilities.GetQuery(OrganizationNumberByNameLikeQuery); var queryParameters = new { organizationName = name.ToLowerInvariant(), limit }; return await _coreDb.ExecuteQuery(query, queryParameters); } } }