diff --git a/src/FinanceAPI/FinanceAPI/Controllers/TransactionsController.cs b/src/FinanceAPI/FinanceAPI/Controllers/TransactionsController.cs index f3b7865..6f8061a 100644 --- a/src/FinanceAPI/FinanceAPI/Controllers/TransactionsController.cs +++ b/src/FinanceAPI/FinanceAPI/Controllers/TransactionsController.cs @@ -1,4 +1,5 @@ -using System.ComponentModel.DataAnnotations; +using System; +using System.ComponentModel.DataAnnotations; using FinanceAPI.Attributes; using FinanceAPICore; using FinanceAPIData; @@ -19,10 +20,10 @@ public TransactionsController(TransactionProcessor transactionProcessor) } [HttpGet] - public IActionResult GetTransactions(string accountId = null) + public IActionResult GetTransactions(string accountId = null, DateTime? startDate = null, DateTime? endDate = null) { string clientId = Request.HttpContext.Items["ClientId"]?.ToString(); - return Json(_transactionProcessor.GetTransactions(clientId, accountId)); + return Json(_transactionProcessor.GetTransactions(clientId, accountId, startDate, endDate)); } [HttpPost] diff --git a/src/FinanceAPI/FinanceAPICore/DataService/ITransactionsDataService.cs b/src/FinanceAPI/FinanceAPICore/DataService/ITransactionsDataService.cs index 2e0b829..2791138 100644 --- a/src/FinanceAPI/FinanceAPICore/DataService/ITransactionsDataService.cs +++ b/src/FinanceAPI/FinanceAPICore/DataService/ITransactionsDataService.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; namespace FinanceAPICore.DataService { @@ -10,7 +11,7 @@ public interface ITransactionsDataService bool UpdateTransactionLogo(string transactionId, string logo); bool DeleteTransaction(string transactionId, string clientId); bool DeleteAllAccountTransactions(string accountId, string clientId); - List GetTransactions(string clientId); + List GetTransactions(string clientId, DateTime? startDate = null, DateTime? endDate = null); bool ImportDatafeedTransaction(Transaction transaction); } } diff --git a/src/FinanceAPI/FinanceAPIData/TransactionProcessor.cs b/src/FinanceAPI/FinanceAPIData/TransactionProcessor.cs index 1f34870..f898d05 100644 --- a/src/FinanceAPI/FinanceAPIData/TransactionProcessor.cs +++ b/src/FinanceAPI/FinanceAPIData/TransactionProcessor.cs @@ -75,12 +75,12 @@ public bool DeleteTransaction(string transactionId, string clientId) return false; } - public List GetTransactions(string clientId, string accountId = null) + public List GetTransactions(string clientId, string accountId = null, DateTime? startDate = null, DateTime? endDate = null) { if (string.IsNullOrEmpty(clientId)) return null; - List transactions = _transactionDataService.GetTransactions(clientId); + List transactions = _transactionDataService.GetTransactions(clientId, startDate, endDate); LoadTransactionAccountNames(transactions, clientId); if (!string.IsNullOrEmpty(accountId)) diff --git a/src/FinanceAPI/FinanceAPIMongoDataService/DataService/TransactionsDataService.cs b/src/FinanceAPI/FinanceAPIMongoDataService/DataService/TransactionsDataService.cs index 4d346dc..e41d069 100644 --- a/src/FinanceAPI/FinanceAPIMongoDataService/DataService/TransactionsDataService.cs +++ b/src/FinanceAPI/FinanceAPIMongoDataService/DataService/TransactionsDataService.cs @@ -51,10 +51,17 @@ public Transaction GetTransactionById(string transactionId, string clientId) return null; } - public List GetTransactions(string clientId) + public List GetTransactions(string clientId, DateTime? startDate = null, DateTime? endDate = null) { MongoDatabase database = new MongoDatabase(databaseName, _connectionString); var filter = Builders.Filter.Eq("ClientID", clientId); + + if (startDate.HasValue) + filter &= Builders.Filter.Gte(t => t.Date, startDate.Value); + + if (endDate.HasValue) + filter &= Builders.Filter.Lte(t => t.Date, endDate.Value); + return database.LoadRecordsByFilter(tableName, filter).OrderByDescending(t => t.Date).ToList(); } diff --git a/src/FinanceAPI/UnitTests/FinanceAPIDataTests/TransactionLogoCalculatorTests.cs b/src/FinanceAPI/UnitTests/FinanceAPIDataTests/TransactionLogoCalculatorTests.cs index 309ae54..39732d6 100644 --- a/src/FinanceAPI/UnitTests/FinanceAPIDataTests/TransactionLogoCalculatorTests.cs +++ b/src/FinanceAPI/UnitTests/FinanceAPIDataTests/TransactionLogoCalculatorTests.cs @@ -17,7 +17,7 @@ public void RunTest(Transaction originalTransaction, string expectedLogo) Dictionary transactionLogos = new Dictionary(); // Setup mocks Mock mockITransactionsDataService = new Mock(); - mockITransactionsDataService.Setup(db => db.GetTransactions(It.IsAny())).Returns(new List{originalTransaction}); + mockITransactionsDataService.Setup(db => db.GetTransactions(It.IsAny(), It.IsAny(), It.IsAny())).Returns(new List{originalTransaction}); mockITransactionsDataService.Setup(db => db.UpdateTransactionLogo(It.IsAny(), It.IsAny())).Callback((string id, string logo) => transactionLogos.Add(id, logo)).Returns(true); mock._transactionsDataService = mockITransactionsDataService.Object;