From 568d7888b87563ed96601d55db7280a034f6df2c Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Tue, 2 May 2023 13:32:30 +0100 Subject: [PATCH] Added GenerateMerchantStatement support to Generator --- .../DataGenerator/Program.cs | 25 ++++++++++++--- .../ITransactionDataGenerator.cs | 5 ++- .../TransactionDataGenerator.cs | 31 +++++++++++++++++++ 3 files changed, 53 insertions(+), 8 deletions(-) diff --git a/TransactionProcessor.DataGenerator/DataGenerator/Program.cs b/TransactionProcessor.DataGenerator/DataGenerator/Program.cs index 13cca75..6c3fe61 100644 --- a/TransactionProcessor.DataGenerator/DataGenerator/Program.cs +++ b/TransactionProcessor.DataGenerator/DataGenerator/Program.cs @@ -68,9 +68,7 @@ static async Task Main(string[] args){ // Set an estate Guid estateId = Guid.Parse("435613ac-a468-47a3-ac4f-649d89764c22"); - // Set the date range - DateTime startDate = new DateTime(2023, 4, 27); //27/7 - DateTime endDate = new DateTime(2023, 4, 28); // This is the date of the last generated transaction + // Get a token to talk to the estate service CancellationToken cancellationToken = new CancellationToken(); @@ -79,12 +77,31 @@ static async Task Main(string[] args){ ITransactionDataGenerator g = new TransactionDataGenerator(Program.SecurityServiceClient, Program.EstateClient, Program.TransactionProcessorClient, + Program.baseAddressFunc("EstateManagementApi"), Program.baseAddressFunc("FileProcessorApi"), Program.baseAddressFunc("TestHostApi"), clientId, clientSecret, RunningMode.Live); + //await Program.GenerateTransactions(g, estateId, cancellationToken); + await Program.GenerateStatements(g, estateId, cancellationToken); + + Console.WriteLine($"Process Complete"); + } + + private static async Task GenerateStatements(ITransactionDataGenerator g, Guid estateId, CancellationToken cancellationToken){ + List merchants = await g.GetMerchants(estateId, cancellationToken); + foreach (MerchantResponse merchant in merchants){ + await g.GenerateMerchantStatement(merchant.EstateId, merchant.MerchantId, DateTime.Now.AddMonths(-2), cancellationToken); + } + } + + private static async Task GenerateTransactions(ITransactionDataGenerator g, Guid estateId, CancellationToken cancellationToken){ + // Set the date range + DateTime startDate = new DateTime(2023, 4, 27); //27/7 + DateTime endDate = new DateTime(2023, 4, 28); // This is the date of the last generated transaction + List dateRange = g.GenerateDateRange(startDate, endDate); List merchants = await g.GetMerchants(estateId, cancellationToken); @@ -109,8 +126,6 @@ static async Task Main(string[] args){ // Settlement await g.PerformSettlement(dateTime, estateId, cancellationToken); } - - Console.WriteLine($"Process Complete"); } } } \ No newline at end of file diff --git a/TransactionProcessor.DataGenerator/TransactionProcessing.DataGeneration/ITransactionDataGenerator.cs b/TransactionProcessor.DataGenerator/TransactionProcessing.DataGeneration/ITransactionDataGenerator.cs index e04b022..6d063ea 100644 --- a/TransactionProcessor.DataGenerator/TransactionProcessing.DataGeneration/ITransactionDataGenerator.cs +++ b/TransactionProcessor.DataGenerator/TransactionProcessing.DataGeneration/ITransactionDataGenerator.cs @@ -6,15 +6,14 @@ public interface ITransactionDataGenerator{ #region Methods List GenerateDateRange(DateTime startDate, DateTime endDate); - Task> GetMerchantContracts(MerchantResponse merchant, CancellationToken cancellationToken); Task> GetMerchants(Guid estateId, CancellationToken cancellationToken); Task PerformMerchantLogon(DateTime dateTime, MerchantResponse merchant, CancellationToken cancellationToken); Task PerformSettlement(DateTime dateTime, Guid estateId, CancellationToken cancellationToken); - Task SendSales(DateTime dateTime, MerchantResponse merchant, ContractResponse contract, CancellationToken cancellationToken); - Task SendUploadFile(DateTime dateTime, ContractResponse contract, MerchantResponse merchant, CancellationToken cancellationToken); + Task GetMerchant(Guid estateId, Guid merchantId, CancellationToken cancellationToken); + Task GenerateMerchantStatement(Guid estateId, Guid merchantId, DateTime statementDateTime, CancellationToken cancellationToken); #endregion } \ No newline at end of file diff --git a/TransactionProcessor.DataGenerator/TransactionProcessing.DataGeneration/TransactionDataGenerator.cs b/TransactionProcessor.DataGenerator/TransactionProcessing.DataGeneration/TransactionDataGenerator.cs index aefa683..0e77003 100644 --- a/TransactionProcessor.DataGenerator/TransactionProcessing.DataGeneration/TransactionDataGenerator.cs +++ b/TransactionProcessor.DataGenerator/TransactionProcessing.DataGeneration/TransactionDataGenerator.cs @@ -37,6 +37,8 @@ public class TransactionDataGenerator : ITransactionDataGenerator{ private readonly ITransactionProcessorClient TransactionProcessorClient; + private readonly String EstateManagementApi; + #endregion #region Constructors @@ -44,6 +46,7 @@ public class TransactionDataGenerator : ITransactionDataGenerator{ public TransactionDataGenerator(ISecurityServiceClient securityServiceClient, IEstateClient estateClient, ITransactionProcessorClient transactionProcessorClient, + String estateManagementApi, String fileProcessorApi, String testHostApi, String clientId, @@ -52,6 +55,7 @@ public TransactionDataGenerator(ISecurityServiceClient securityServiceClient, this.SecurityServiceClient = securityServiceClient; this.EstateClient = estateClient; this.TransactionProcessorClient = transactionProcessorClient; + this.EstateManagementApi = estateManagementApi; this.FileProcessorApi = fileProcessorApi; this.TestHostApi = testHostApi; @@ -180,6 +184,33 @@ public async Task SendUploadFile(DateTime dateTime, ContractResponse contract, M await this.UploadFile(uploadFile, Guid.Empty, dateTime, cancellationToken); } + public async Task GetMerchant(Guid estateId, Guid merchantId, CancellationToken cancellationToken){ + String token = await this.GetAuthToken(cancellationToken); + return await this.EstateClient.GetMerchant(token, estateId, merchantId, cancellationToken); + } + + public async Task GenerateMerchantStatement(Guid estateId, Guid merchantId, DateTime statementDateTime, CancellationToken cancellationToken) + { + HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, $"{this.EstateManagementApi}/api/estates/{estateId}/merchants/{merchantId}/statements"); + var body = new + { + merchant_statement_date = statementDateTime, + }; + request.Content = new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json"); + + if (this.RunningMode == RunningMode.WhatIf) + { + Console.WriteLine($"Merchant Statement Generated for merchant [{merchantId}] Statement Date [{body.merchant_statement_date}]"); + } + String token = await this.GetAuthToken(cancellationToken); + request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); + + using (HttpClient client = new HttpClient()) + { + await client.SendAsync(request, cancellationToken); + } + } + private List<(SaleTransactionRequest request, Decimal amount)> BuildBillPaymentSaleRequests(DateTime dateTime, MerchantResponse merchant, ContractResponse contract, ContractProduct product, (Int32 accountNumber, String accountName, Decimal balance) billDetails){ List<(SaleTransactionRequest request, Decimal amount)> requests = new List<(SaleTransactionRequest request, Decimal amount)>();