using LCU.Library.Internal.CoreApiWrapperLib.CoreDbUtilities; using LCU.Library.Internal.CoreApiWrapperLib.Utilities; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Agreements; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.MemberAgreements; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace LCU.Library.Internal.CoreApiWrapperLib.DataAccess { public class AgreeDao: IAgreeDao { private readonly ICoreDbExecution _coreDbExecution; private const string AgreeUserByAccountsQuery = "AgreeUserByAccountsQuery"; private const string AgreeUserByPersonNumberQuery = "AgreeUserByPersonNumberQuery"; private const string AgreeUserByOrganizationNumberQuery = "AgreeUserByOrganizationNumberQuery"; private const string AgreementByUserIdQuery = "Agreement/AgreementByUserIdQuery"; private const string AgreementByAgreementIdQuery = "Agreement/AgreementByAgreementIdQuery"; private const string AgreementsByAccountIdQuery = "Agreement/AgreementsByAccountIdQuery"; private const string AccountByAccountIdQuery = "Agreement/AccountByAccountIdQuery"; private const string AccountsByAgreementUserIdQuery = "Agreement/AccountsByAgreementUserIdQuery"; private const string AccountsByOrganizationIdQuery = "Agreement/AccountsByOrganizationIdQuery"; private const string AgreementOwnerByAccountsQuery = "Agreement/AgreementOwnerByAccountsQuery"; private const string AuditActiveSubActiveForAccountChangesQuery = "Agreement/Audit/AuditActiveSubActiveForAccountChangesQuery"; private const string AuditActiveSubActiveForAgreementChangesQuery = "Agreement/Audit/AuditActiveSubActiveForAgreementChangesQuery"; private const string AuditActiveSubActiveForOrganizationChangesQuery = "Agreement/Audit/AuditActiveSubActiveForOrganizationChangesQuery"; private const string AccountNumbersHolder = "{AccountNumbersHolder}"; private const string DnaTimeFormat = "yyyy-MM-dd HH:mm:ss"; public AgreeDao(ICoreDbExecution coreDbExecution) { _coreDbExecution = coreDbExecution; } public async Task> FindAgreeUsersByAccountNumbers(List accountNumbers) { var query = QueryUtilities.GetQuery(AgreeUserByAccountsQuery); var accountNumbersStringList = QueryUtilities.BuildParameterListString(accountNumbers); var alteredQuery = query.Replace(AccountNumbersHolder, accountNumbersStringList); var parameterDictionary = QueryUtilities.BuildDictionaryParameter(accountNumbers); var result = await _coreDbExecution.ExecuteQuery>(alteredQuery, parameterDictionary); return result; } public async Task> FindAgreeUserByPersonNumber(long personNumber) { var query = QueryUtilities.GetQuery(AgreeUserByPersonNumberQuery); var personNumberParam = new { personNumber }; var agreementUser = await _coreDbExecution.ExecuteQuery(query, personNumberParam); return agreementUser; } public async Task FindAgreeUserByOrganizationNumber(long organizationNumber) { var query = QueryUtilities.GetQuery(AgreeUserByOrganizationNumberQuery); var organizationNumberParam = new { organizationNumber }; var agreementUser = await _coreDbExecution.ExecuteQuery(query, organizationNumberParam); return agreementUser.FirstOrDefault(); } public async Task FindAgreementByUserId(string userId) { var query = QueryUtilities.GetQuery(AgreementByUserIdQuery); var userIdParam = new { userId }; var agreement = await _coreDbExecution.ExecuteQuery(query, userIdParam); return agreement.FirstOrDefault(); } public async Task FindAgreementByAgreementId(long agreementId) { var query = QueryUtilities.GetQuery(AgreementByAgreementIdQuery); var agreementIdParam = new { agreementId }; var agreement = await _coreDbExecution.ExecuteQuery(query, agreementIdParam); return agreement.FirstOrDefault(); } public async Task> FindAgreementsByAccountId(long accountNumber) { var query = QueryUtilities.GetQuery(AgreementsByAccountIdQuery); var accountNumberParams = new { accountNumber }; return await _coreDbExecution.ExecuteQuery(query, accountNumberParams); } public async Task> FindAgreementAccountsByUserId(string userId) { var query = QueryUtilities.GetQuery(AccountsByAgreementUserIdQuery); var userIdParams = new { userId }; return await _coreDbExecution.ExecuteQuery(query, userIdParams); } public async Task> FindAgreementAccountsByOrganizationId(long organizationId) { var query = QueryUtilities.GetQuery(AccountsByOrganizationIdQuery); var organizationIdParams = new { organizationId }; return await _coreDbExecution.ExecuteQuery(query, organizationIdParams); } public async Task FindAgreementAccountByAccountId(long accountNumber) { var query = QueryUtilities.GetQuery(AccountByAccountIdQuery); var accountNumberParams = new { accountNumber }; var account = await _coreDbExecution.ExecuteQuery(query, accountNumberParams); return account.FirstOrDefault(); } public async Task> FindAgreementOwnerByAccountNumbers(IEnumerable accountNumbers) { var query = QueryUtilities.GetQuery(AgreementOwnerByAccountsQuery); var accountNumbersStringList = string.Join(",", accountNumbers); var alteredQuery = query.Replace(AccountNumbersHolder, accountNumbersStringList); return await _coreDbExecution.ExecuteQuery(alteredQuery, null); } public async Task FindAgreementOwnerByAccountNumber(long accountNumber) { var query = QueryUtilities.GetQuery(AgreementOwnerByAccountsQuery); var alteredQuery = query.Replace(AccountNumbersHolder, accountNumber.ToString()); var accountOwner = await _coreDbExecution.ExecuteQuery(alteredQuery, null); return accountOwner.FirstOrDefault(); } public async Task> AuditAccountDeliveryMethodAndOwnerChangesByDateLastMaintained(DateTime maintenanceDate) { var query = QueryUtilities.GetQuery(AuditActiveSubActiveForAccountChangesQuery); var dateLastMaintained = maintenanceDate.ToString(DnaTimeFormat); var maintenanceDateParam = new { dateLastMaintained }; return await _coreDbExecution.ExecuteQuery(query, maintenanceDateParam); } public async Task> AuditAccountAgreementChangesByDateLastMaintained(DateTime maintenanceDate) { var query = QueryUtilities.GetQuery(AuditActiveSubActiveForAgreementChangesQuery); var dateLastMaintained = maintenanceDate.ToString(DnaTimeFormat); var maintenanceDateParam = new { dateLastMaintained }; return await _coreDbExecution.ExecuteQuery(query, maintenanceDateParam); } public async Task> AuditAccountOrganizationChangesByDateLastMaintained(DateTime maintenanceDate) { var query = QueryUtilities.GetQuery(AuditActiveSubActiveForOrganizationChangesQuery); var dateLastMaintained = maintenanceDate.ToString(DnaTimeFormat); var maintenanceDateParam = new { dateLastMaintained }; return await _coreDbExecution.ExecuteQuery(query, maintenanceDateParam); } } }