using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using LCU.Library.Internal.CoreApiWrapperLib.CoreDbUtilities; using LCU.Library.Internal.CoreApiWrapperLib.Utilities; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Activity; using LCU.Library.Internal.CoreApiWrapperModel.LcuModels.Activity; namespace LCU.Library.Internal.CoreApiWrapperLib.DataAccess { public class ActivityDao : IActivityDao { private readonly ICoreDbExecution _coreDbExecution; private const string NewCheckingAccountSalesDigitalBanking = "Activity/NewCheckingAccountSalesDigitalBanking"; private const string NewCheckingAccountSalesQuery = "Activity/NewCheckingAccountSales"; private const string NewAtmCheckCardQuery = "Activity/NewAtmCheckCardSales"; private const string NewMortgageSalesQuery = "Activity/NewMortgageAccountSales"; private const string NewVehicleSalesQuery = "Activity/NewVehicleAccountSales"; private const string NewDebtProtectedLoanQuery = "Activity/NewDebtProtectedLoanSales"; private const string EStatementDeliveryQuery = "Activity/QueryEStatementDeliveryMethod"; private const string NewActivityManagerIncentiveReferralQuery = "Activity/NewActivityManagerIncentiveReferralQuery"; private const string ActivityManagerReferralById = "Activity/QueryActivityManagerActivityDetail"; private const string GetPersonActivityByPhoneNumberQuery = "Activity/GetPersonActivityByPhoneNumberQuery"; private const string GetPersonActivityByPersonNumberQuery = "Activity/GetPersonActivityByPersonNumberQuery"; private const string DnaTimeFormat = "yyyy-MM-dd HH:mm:ss"; public ActivityDao(ICoreDbExecution coreDbExecution) { _coreDbExecution = coreDbExecution; } //Some of this could be DRYer, opting for this for better Type Safety and Messaging in Services. public async Task> GetNewCheckingActivitiesNewerThanDate( DateTime newerThanDateTime, int limitAmount ) { var query = QueryUtilities.GetQuery(NewCheckingAccountSalesQuery); //Define Anonymous Object to Pass in Parameter "newerThanDateTime: "datetimestring" to query //See: https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/types/anonymous-types var accountActivityParams = new { newerThanDateTime = newerThanDateTime.ToString(DnaTimeFormat), afterActivityNbr = (string)null, limitAmount = limitAmount.ToString() }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> GetNewCheckingActivitiesAfterActivityNbr( long afterActivityNumber, int limitAmount ) { var query = QueryUtilities.GetQuery(NewCheckingAccountSalesQuery); var accountActivityParams = new { afterActivityNbr = afterActivityNumber.ToString(), newerThanDateTime = (string)null, limitAmount = limitAmount.ToString() }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> GetNewCheckingActivities( DateTime newerThanDateTime, long afterActivityNumber, int limitAmount ) { var query = QueryUtilities.GetQuery(NewCheckingAccountSalesQuery); var accountActivityParams = new { afterActivityNbr = afterActivityNumber.ToString(), newerThanDateTime = newerThanDateTime.ToString(DnaTimeFormat), limitAmount = limitAmount.ToString() }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> GetNewDigitalBankingCheckingActivitiesNewerThanDate( DateTime newerThanDateTime, int limitAmount ) { var query = QueryUtilities.GetQuery(NewCheckingAccountSalesDigitalBanking); var accountActivityParams = new { newerThanDateTime = newerThanDateTime.ToString(DnaTimeFormat), afterActivityNbr = (string)null, limitAmount = limitAmount.ToString() }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> GetNewDigitalBankingCheckingActivitiesAfterActivityNbr( long afterActivityNumber, int limitAmount ) { var query = QueryUtilities.GetQuery(NewCheckingAccountSalesDigitalBanking); var accountActivityParams = new { afterActivityNbr = afterActivityNumber.ToString(), newerThanDateTime = (string)null, limitAmount = limitAmount.ToString() }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> GetNewDigitalBankingCheckingActivities( DateTime newerThanDateTime, long afterActivityNumber, int limitAmount ) { var query = QueryUtilities.GetQuery(NewCheckingAccountSalesDigitalBanking); var accountActivityParams = new { afterActivityNbr = afterActivityNumber.ToString(), newerThanDateTime = newerThanDateTime.ToString(DnaTimeFormat), limitAmount = limitAmount.ToString() }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> GetNewAtmCheckCardActivitiesNewerThanDate( DateTime newerThanDateTime, int limitAmount ) { var query = QueryUtilities.GetQuery(NewAtmCheckCardQuery); var accountActivityParams = new { newerThanDateTime = newerThanDateTime.ToString(DnaTimeFormat), afterActivityNbr = (string)null, limitAmount = limitAmount.ToString() }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> GetNewAtmCheckCardActivitiesAfterActivityNbr( long afterActivityNumber, int limitAmount ) { var query = QueryUtilities.GetQuery(NewAtmCheckCardQuery); var accountActivityParams = new { afterActivityNbr = afterActivityNumber.ToString(), newerThanDateTime = (string)null, limitAmount = limitAmount.ToString() }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> GetNewAtmCheckCardActivities( DateTime newerThanDateTime, long afterActivityNumber, int limitAmount ) { var query = QueryUtilities.GetQuery(NewAtmCheckCardQuery); var accountActivityParams = new { afterActivityNbr = afterActivityNumber.ToString(), newerThanDateTime = newerThanDateTime.ToString(DnaTimeFormat), limitAmount = limitAmount.ToString() }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> GetNewActivityManagerReferralsNewerThan( DateTime newerThanOriginationDateTime) { var query = QueryUtilities.GetQuery(NewActivityManagerIncentiveReferralQuery); var accountActivityParams = new { newerThanOriginationDate = newerThanOriginationDateTime.ToString(DnaTimeFormat), afterActivityId = (string)null }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> GetNewActivityManagerReferralsAfterActivityId(long afterActivityId) { var query = QueryUtilities.GetQuery(NewActivityManagerIncentiveReferralQuery); var accountActivityParams = new { afterActivityId = afterActivityId.ToString(), newerThanOriginationDate = (string)null }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> GetNewActivityManagerReferrals(DateTime newerThanOriginationDateTime, long afterActivityId) { var query = QueryUtilities.GetQuery(NewActivityManagerIncentiveReferralQuery); var accountActivityParams = new { afterActivityId = afterActivityId.ToString(), newerThanOriginationDate = newerThanOriginationDateTime.ToString(DnaTimeFormat), }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> GetNewMortgageSaleActivities( DateTime? newerThanDateTime, long? afterActivityNumber) { var query = QueryUtilities.GetQuery(NewMortgageSalesQuery); var accountActivityParams = new { afterActivityNbr = afterActivityNumber?.ToString(), newerThanDateTime = newerThanDateTime?.ToString(DnaTimeFormat) }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> GetNewVehicleSaleActivities( DateTime? newerThanDateTime, long? afterActivityNumber) { var query = QueryUtilities.GetQuery(NewVehicleSalesQuery); var accountActivityParams = new { afterActivityNbr = afterActivityNumber?.ToString(), newerThanDateTime = newerThanDateTime?.ToString(DnaTimeFormat) }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> GetNewDebtProtectedLoanSaleActivities( DateTime? newerThanDateTime, long? afterActivityNumber) { var query = QueryUtilities.GetQuery(NewDebtProtectedLoanQuery); var accountActivityParams = new { afterActivityNbr = afterActivityNumber?.ToString(), newerThanDateTime = newerThanDateTime?.ToString(DnaTimeFormat) }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> QueryActivityManagerActivity(ActivityQueryRequest request) { var query = QueryUtilities.GetQuery(ActivityManagerReferralById); var accountActivityParams = new { activityIds = request.ActivityIds.Select(x => x.ToString()).ToArray() }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> GetEStatementDeliveryActivity(DateTime? newerThanDateTime) { var query = QueryUtilities.GetQuery(EStatementDeliveryQuery); var accountActivityParams = new { newerThanDateTime = newerThanDateTime?.ToString(DnaTimeFormat) }; var results = await _coreDbExecution.ExecuteQuery(query, accountActivityParams); return results.ToList(); } public async Task> GetPersonActivityByPhoneNumber(string phoneNumber) { var query = QueryUtilities.GetQuery(GetPersonActivityByPhoneNumberQuery); var personRecentActivityParams = new { phoneNumber = phoneNumber }; return (await _coreDbExecution.ExecuteQuery(query, personRecentActivityParams)).ToList(); } public async Task GetPersonActivityByPersonNumber(string personNumber) { var query = QueryUtilities.GetQuery(GetPersonActivityByPersonNumberQuery); var personRecentActivityParams = new { personNumber = personNumber }; return (await _coreDbExecution.ExecuteQuery(query, personRecentActivityParams)).FirstOrDefault(); } } }