using System.Threading.Tasks; using Newtonsoft.Json; 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.CoreApiWrapperModel.Constants; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.PostalAddresses; using System.Collections.Generic; namespace LCU.Library.Internal.CoreApiWrapperLib.DataAccess { public class AddressDao : BaseCoreDao, IAddressDao { private readonly CoreConfiguration _coreConfiguration; private readonly CoreApiConfiguration _coreApiConfiguration; public AddressDao(ICoreRequest coreRequest, CoreConfiguration coreConfiguration) : base(coreRequest) { _coreConfiguration = coreConfiguration; _coreApiConfiguration = _coreConfiguration.CoreApiConfiguration; } /// /// Calls Core API to search based on personNumber and postalAddressNumber. /// Default Included: Standard /// /// /// /// /// CoreApiMessage public async Task> FindByPersonNumberAddressNumber(CoreRequestParameters coreRequestParameters, string personNumber, string postalAddressId) { var endpointParameters = HttpUtilities.BuildDictionaryOfNonNullValues(coreRequestParameters); var endpoint = ReplaceEndpointsPersonIdAndPostalAddressId(personNumber, postalAddressId); return await _coreRequest.GetRequestObject>(endpoint, endpointParameters, null); } /// /// Calls Core API to search based on personNumber. /// Default Included: Standard /// /// /// /// /// CoreApiMessage public async Task>> FindByPersonNumber(CoreRequestParameters coreRequestParameters, string personNumber) { var endpointParameters = HttpUtilities.BuildDictionaryOfNonNullValues(coreRequestParameters); var endpoint = HttpUtilities.ReplaceRootParameter(_coreApiConfiguration.CoreEndPointConfiguration.PersonPostalAddresses, RequestRootParameters.PersonId, personNumber); var result = await _coreRequest.GetRequestObject>>(endpoint, endpointParameters, null); return result; } // /// Calls Core API to Post Address. /// Default Included: Standard /// /// /// boole public async Task InsertPersonPostalAddress(PersonPostalAddress request) { var endpoint = HttpUtilities.ReplaceRootParameter(_coreApiConfiguration.CoreEndPointConfiguration.PersonPostalAddresses, RequestRootParameters.PersonId, request.PersonNumber.ToString()); var message = new { messageBody = request }; var jsonBody = JsonConvert.SerializeObject(message); var result = await _coreRequest.PostRequestObject>(endpoint, null, jsonBody); return result?.MessageBody; } /// /// Calls Core API to Delete Address. /// Default Included: Standard /// /// /// boole public async Task RemovePersonPostalAddress(CoreApiMessage request) { var endpoint = ReplaceEndpointsPersonIdAndPostalAddressId(request.MessageBody.PersonNumber.ToString(), request.MessageBody.Id.ToString()); var jsonBody = JsonConvert.SerializeObject(request); var result = await _coreRequest.DeleteRequestObject(endpoint, null, jsonBody); var stringResult = ""; //If not null DNA sent back a error object back. We want to serialize and use in error log message. if (result != null) { stringResult = JsonConvert.SerializeObject(result); } return stringResult; } public async Task UpdatePersonAddrLine(CoreApiMessage request) { var endpoint = ReplaceEndpointsPersonIdAndAdressUseCode(request.MessageBody.PersonNumber.ToString(), request.MessageBody.AddressUseCode); var jsonBody = JsonConvert.SerializeObject(request); var result = await _coreRequest.PutRequestObject>(endpoint, null, jsonBody); return result?.MessageBody; } private string ReplaceEndpointsPersonIdAndPostalAddressId(string personId, string postalAddressId) { var endpoint = ReplaceEndpointsPersonId(_coreApiConfiguration.CoreEndPointConfiguration.PersonPostalAddress, personId); return HttpUtilities.ReplaceRootParameter(endpoint, RequestRootParameters.PostalAddressId, postalAddressId); } private string ReplaceEndpointsPersonIdAndAdressUseCode(string personId, string addressUseCode) { var endpoint = ReplaceEndpointsPersonId(_coreApiConfiguration.CoreEndPointConfiguration.PersonAddressLine, personId); return HttpUtilities.ReplaceRootParameter(endpoint, RequestRootParameters.AddressUseCode, addressUseCode); } private string ReplaceEndpointsPersonId(string endpoint, string personId) { return HttpUtilities.ReplaceRootParameter(endpoint, RequestRootParameters.PersonId, personId); } } }