diff --git a/TransactionProcessorACL.BusinessLogic.Tests/MediatorTests.cs b/TransactionProcessorACL.BusinessLogic.Tests/MediatorTests.cs index c9f1ffa..57a9c4a 100644 --- a/TransactionProcessorACL.BusinessLogic.Tests/MediatorTests.cs +++ b/TransactionProcessorACL.BusinessLogic.Tests/MediatorTests.cs @@ -18,6 +18,7 @@ namespace TransactionProcessorACL.BusinessLogic.Tests { using System.Threading; using Microsoft.Extensions.DependencyInjection; + using TransactionProcessorACL.DataTransferObjects.Requests; using Models; using Services; @@ -160,5 +161,12 @@ public async Task> GetMerchantSchedule(Guid est CancellationToken cancellationToken) { return Result.Success(new MerchantScheduleResponse()); } + + public async Task> GetMerchantDailyPerformanceSummary(Guid estateId, + MerchantDailyPerformanceSummaryRequest request, + CancellationToken cancellationToken) + { + return Result.Success(new MerchantDailyPerformanceSummaryResponse()); + } } } diff --git a/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACLApplicationServiceTests.cs b/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACLApplicationServiceTests.cs index 8dad0f8..b614604 100644 --- a/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACLApplicationServiceTests.cs +++ b/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACLApplicationServiceTests.cs @@ -6,6 +6,7 @@ namespace TransactionProcessorACL.BusinesssLogic.Tests using System.Threading; using System.Threading.Tasks; using BusinessLogic.Services; + using TransactionProcessorACL.BusinessLogic.BackendAPI; using Microsoft.Extensions.Configuration; using Models; using Moq; @@ -14,6 +15,7 @@ namespace TransactionProcessorACL.BusinesssLogic.Tests using Shared.Logger; using Shouldly; using Testing; + using TransactionProcessorACL.DataTransferObjects.Requests; using TransactionProcessor.Client; using TransactionProcessor.DataTransferObjects; using Xunit; @@ -30,8 +32,9 @@ public TransactionProcessorACLApplicationServiceTests() transactionProcessorClient = new Mock(); securityServiceClient = new Mock(); + estateReportingApiClient = new Mock(); applicationService = - new TransactionProcessorACLApplicationService(transactionProcessorClient.Object, securityServiceClient.Object); + new TransactionProcessorACLApplicationService(transactionProcessorClient.Object, securityServiceClient.Object, estateReportingApiClient.Object); } private void SetupMemoryConfiguration() @@ -47,6 +50,8 @@ private void SetupMemoryConfiguration() private Mock securityServiceClient; + private Mock estateReportingApiClient; + private ITransactionProcessorACLApplicationService applicationService; [Fact] public async Task TransactionProcessorACLApplicationService_ProcessLogonTransaction_TransactionIsSuccessful() @@ -587,5 +592,62 @@ public async Task TransactionProcessorACLApplicationService_GetMerchantSchedule_ var merchantScheduleResponse = await applicationService.GetMerchantSchedule(TestData.EstateId, TestData.MerchantId, TestData.ScheduleYear, CancellationToken.None); merchantScheduleResponse.IsFailed.ShouldBeTrue(); } + + [Fact] + public async Task TransactionProcessorACLApplicationService_GetMerchantDailyPerformanceSummary_ReturnedFromEstateReportingClient() + { + MerchantDailyPerformanceSummaryRequest capturedRequest = null; + estateReportingApiClient + .Setup(v => v.GetMerchantDailyPerformanceSummary(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .Callback((_, _, request, _) => capturedRequest = request) + .ReturnsAsync(Result.Success(new MerchantDailyPerformanceSummaryResponse + { + Metrics = + [ + new MetricItem + { + Title = "Total Sales Count", + Value = 6, + Description = "All sales transactions in the range", + Category = 0 + } + ] + })); + securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + + Result result = await applicationService.GetMerchantDailyPerformanceSummary( + TestData.EstateId, + new MerchantDailyPerformanceSummaryRequest + { + MerchantReportingId = 12345, + StartDate = new DateTime(2026, 7, 1), + EndDate = new DateTime(2026, 7, 1) + }, + CancellationToken.None); + + result.IsSuccess.ShouldBeTrue(); + result.Data.ShouldNotBeNull(); + result.Data.Metrics.Count.ShouldBe(1); + capturedRequest.ShouldNotBeNull(); + capturedRequest.MerchantReportingId.ShouldBe(12345); + } + + [Fact] + public async Task TransactionProcessorACLApplicationService_GetMerchantDailyPerformanceSummary_GetTokenFailed_ResultIsFailed() + { + securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Failure()); + + Result result = await applicationService.GetMerchantDailyPerformanceSummary( + TestData.EstateId, + new MerchantDailyPerformanceSummaryRequest + { + MerchantReportingId = 12345, + StartDate = new DateTime(2026, 7, 1), + EndDate = new DateTime(2026, 7, 1) + }, + CancellationToken.None); + + result.IsFailed.ShouldBeTrue(); + } } } diff --git a/TransactionProcessorACL.BusinessLogic/BackendAPI/EstateReportingApiClient.cs b/TransactionProcessorACL.BusinessLogic/BackendAPI/EstateReportingApiClient.cs new file mode 100644 index 0000000..e5e687d --- /dev/null +++ b/TransactionProcessorACL.BusinessLogic/BackendAPI/EstateReportingApiClient.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using ClientProxyBase; +using Shared.General; +using Shared.Results; +using SimpleResults; +using TransactionProcessorACL.DataTransferObjects.Requests; +using TransactionProcessorACL.Models; + +namespace TransactionProcessorACL.BusinessLogic.BackendAPI; + +public class EstateReportingApiClient : ClientProxyBase.ClientProxyBase, IEstateReportingApiClient +{ + private readonly Func BaseAddressResolver; + private const string EstateIdHeaderName = "EstateId"; + + public EstateReportingApiClient(Func baseAddressResolver, + HttpClient httpClient, + Func serialise, + Func deserialise) : base(httpClient, serialise, deserialise) + { + this.BaseAddressResolver = baseAddressResolver; + } + + public async Task> GetMerchantDailyPerformanceSummary(String accessToken, + Guid estateId, + MerchantDailyPerformanceSummaryRequest request, + CancellationToken cancellationToken) + { + string requestUri = this.BuildRequestUrl("/api/transactions/merchantdailyperformancesummary"); + + try + { + List<(string headerName, string headerValue)> additionalHeaders = + [ + (EstateIdHeaderName, estateId.ToString()) + ]; + + Result result = + await this.Post(requestUri, request, accessToken, additionalHeaders, cancellationToken); + + if (result.IsFailed) + return ResultHelpers.CreateFailure(result); + + return result; + } + catch (Exception ex) + { + Exception exception = new($"Error getting merchant daily performance summary for estate {estateId}.", ex); + return Result.Failure(exception.Message); + } + } + + private string BuildRequestUrl(string relativePath) + { + string baseAddress = this.BaseAddressResolver("EstateReportingApi"); + return $"{baseAddress.TrimEnd('/')}{relativePath}"; + } +} diff --git a/TransactionProcessorACL.BusinessLogic/BackendAPI/IEstateReportingApiClient.cs b/TransactionProcessorACL.BusinessLogic/BackendAPI/IEstateReportingApiClient.cs new file mode 100644 index 0000000..e3cbd51 --- /dev/null +++ b/TransactionProcessorACL.BusinessLogic/BackendAPI/IEstateReportingApiClient.cs @@ -0,0 +1,16 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using SimpleResults; +using TransactionProcessorACL.DataTransferObjects.Requests; +using TransactionProcessorACL.Models; + +namespace TransactionProcessorACL.BusinessLogic.BackendAPI; + +public interface IEstateReportingApiClient +{ + Task> GetMerchantDailyPerformanceSummary(String accessToken, + Guid estateId, + MerchantDailyPerformanceSummaryRequest request, + CancellationToken cancellationToken); +} diff --git a/TransactionProcessorACL.BusinessLogic/Services/ITransactionProcessorACLApplicationService.cs b/TransactionProcessorACL.BusinessLogic/Services/ITransactionProcessorACLApplicationService.cs index 4f042bb..c527b60 100644 --- a/TransactionProcessorACL.BusinessLogic/Services/ITransactionProcessorACLApplicationService.cs +++ b/TransactionProcessorACL.BusinessLogic/Services/ITransactionProcessorACLApplicationService.cs @@ -8,6 +8,7 @@ namespace TransactionProcessorACL.BusinessLogic.Services using System.Threading; using System.Threading.Tasks; using Shared.General; + using TransactionProcessorACL.DataTransferObjects.Requests; using TransactionProcessor.DataTransferObjects; using TransactionProcessorACL.Models; using GetVoucherResponse = Models.GetVoucherResponse; @@ -60,5 +61,9 @@ Task> GetMerchantSchedule(Guid estateId, Guid merchantId, Int32 year, CancellationToken cancellationToken); + + Task> GetMerchantDailyPerformanceSummary(Guid estateId, + MerchantDailyPerformanceSummaryRequest request, + CancellationToken cancellationToken); } } diff --git a/TransactionProcessorACL.BusinessLogic/Services/TransactionProcessorACLApplicationService.cs b/TransactionProcessorACL.BusinessLogic/Services/TransactionProcessorACLApplicationService.cs index 443dc34..8e8688b 100644 --- a/TransactionProcessorACL.BusinessLogic/Services/TransactionProcessorACLApplicationService.cs +++ b/TransactionProcessorACL.BusinessLogic/Services/TransactionProcessorACLApplicationService.cs @@ -11,6 +11,8 @@ namespace TransactionProcessorACL.BusinessLogic.Services using System.Net.Http; using System.Threading; using System.Threading.Tasks; + using TransactionProcessorACL.BusinessLogic.BackendAPI; + using TransactionProcessorACL.DataTransferObjects.Requests; using Models; using SecurityService.Client; using Shared.General; @@ -38,6 +40,11 @@ public class TransactionProcessorACLApplicationService : ITransactionProcessorAC /// private readonly ITransactionProcessorClient TransactionProcessorClient; + /// + /// The estate reporting client + /// + private readonly IEstateReportingApiClient? EstateReportingApiClient; + #endregion #region Constructors @@ -48,10 +55,12 @@ public class TransactionProcessorACLApplicationService : ITransactionProcessorAC /// The transaction processor client. /// The security service client. public TransactionProcessorACLApplicationService(ITransactionProcessorClient transactionProcessorClient, - ISecurityServiceClient securityServiceClient) + ISecurityServiceClient securityServiceClient, + IEstateReportingApiClient? estateReportingApiClient = null) { this.TransactionProcessorClient = transactionProcessorClient; this.SecurityServiceClient = securityServiceClient; + this.EstateReportingApiClient = estateReportingApiClient; } #endregion @@ -416,6 +425,24 @@ public async Task> GetMerchantSchedule(Guid est return Result.Success(merchantScheduleResponse); } + public async Task> GetMerchantDailyPerformanceSummary(Guid estateId, + MerchantDailyPerformanceSummaryRequest request, + CancellationToken cancellationToken) + { + if (this.EstateReportingApiClient == null) + { + return Result.Failure("Estate reporting client is not configured"); + } + + Result accessTokenResult = await this.GetAccessToken(cancellationToken); + if (accessTokenResult.IsFailed) { + return ResultHelpers.CreateFailure(accessTokenResult); + } + + TokenResponse accessToken = accessTokenResult.Data; + return await this.EstateReportingApiClient.GetMerchantDailyPerformanceSummary(accessToken.AccessToken, estateId, request, cancellationToken); + } + private static ProcessReconciliationResponse CreateProcessReconciliationResponse(ReconciliationResponse reconciliationResponse) { return new ProcessReconciliationResponse diff --git a/TransactionProcessorACL.BusinessLogic/TransactionProcessorACL.BusinessLogic.csproj b/TransactionProcessorACL.BusinessLogic/TransactionProcessorACL.BusinessLogic.csproj index 372b7a8..c6a20a5 100644 --- a/TransactionProcessorACL.BusinessLogic/TransactionProcessorACL.BusinessLogic.csproj +++ b/TransactionProcessorACL.BusinessLogic/TransactionProcessorACL.BusinessLogic.csproj @@ -19,6 +19,7 @@ + diff --git a/TransactionProcessorACL.DataTransferObjects/Requests/MerchantDailyPerformanceSummaryRequest.cs b/TransactionProcessorACL.DataTransferObjects/Requests/MerchantDailyPerformanceSummaryRequest.cs new file mode 100644 index 0000000..9f3cbbf --- /dev/null +++ b/TransactionProcessorACL.DataTransferObjects/Requests/MerchantDailyPerformanceSummaryRequest.cs @@ -0,0 +1,14 @@ +using System; +using System.Diagnostics.CodeAnalysis; + +namespace TransactionProcessorACL.DataTransferObjects.Requests; + +[ExcludeFromCodeCoverage] +public class MerchantDailyPerformanceSummaryRequest +{ + public int MerchantReportingId { get; set; } + + public DateTime StartDate { get; set; } + + public DateTime EndDate { get; set; } +} diff --git a/TransactionProcessorACL.Models/MerchantDailyPerformanceSummaryResponse.cs b/TransactionProcessorACL.Models/MerchantDailyPerformanceSummaryResponse.cs new file mode 100644 index 0000000..014cb45 --- /dev/null +++ b/TransactionProcessorACL.Models/MerchantDailyPerformanceSummaryResponse.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; + +namespace TransactionProcessorACL.Models; + +public class MerchantDailyPerformanceSummaryResponse +{ + public List Metrics { get; set; } = []; + + public List DrillDownTransactions { get; set; } = []; +} + +public class MetricItem +{ + public string Title { get; set; } + + public decimal Value { get; set; } + + public string Description { get; set; } + + public int Category { get; set; } +} + +public class DrillDownTransaction +{ + public string Reference { get; set; } + + public string Product { get; set; } + + public string Status { get; set; } + + public decimal Amount { get; set; } + + public DateTime TransactionDateTime { get; set; } +} diff --git a/TransactionProcessorACL.Testing/TestData.cs b/TransactionProcessorACL.Testing/TestData.cs index 1b8b855..0539d00 100644 --- a/TransactionProcessorACL.Testing/TestData.cs +++ b/TransactionProcessorACL.Testing/TestData.cs @@ -189,6 +189,7 @@ public class TestData ["AppSettings:MinimumSupportedApplicationVersion"] = "1.0.5", ["AppSettings:SecurityService"] = "http://192.168.1.133:5001", ["AppSettings:TransactionProcessorApi"] = "http://192.168.1.133:5002", + ["AppSettings:EstateReportingApi"] = "http://192.168.1.133:5011", ["AppSettings:ClientId"] = "ClientId", ["AppSettings:ClientSecret"] = "secret", ["SecurityConfiguration:Authority"] = "https://127.0.0.1", @@ -202,6 +203,7 @@ public class TestData ["AppSettings:MinimumSupportedApplicationVersion"] = "1.0.5", ["AppSettings:SecurityService"] = "http://192.168.1.133:5001", ["AppSettings:TransactionProcessorApi"] = "http://192.168.1.133:5002", + ["AppSettings:EstateReportingApi"] = "http://192.168.1.133:5011", ["AppSettings:ClientId"] = "ClientId", ["AppSettings:ClientSecret"] = "secret", ["SecurityConfiguration:Authority"] = "https://127.0.0.1", diff --git a/TransactionProcessorACL.Tests/Handlers/ReportingHandlersTests.cs b/TransactionProcessorACL.Tests/Handlers/ReportingHandlersTests.cs new file mode 100644 index 0000000..5dc03d1 --- /dev/null +++ b/TransactionProcessorACL.Tests/Handlers/ReportingHandlersTests.cs @@ -0,0 +1,53 @@ +using System; +using System.Security.Claims; +using System.Threading; +using System.Threading.Tasks; +using Moq; +using Shouldly; +using SimpleResults; +using TransactionProcessorACL.BusinessLogic.Services; +using TransactionProcessorACL.DataTransferObjects.Requests; +using TransactionProcessorACL.Handlers; +using Xunit; + +namespace TransactionProcessorACL.Tests.Handlers; + +public class ReportingHandlersTests +{ + [Fact] + public async Task GetMerchantDailyPerformanceSummary_PassesEstateClaimAndRequestToApplicationService() + { + var user = new ClaimsPrincipal(new ClaimsIdentity(new[] + { + new Claim("estateId", "1C8354B7-B97A-46EA-9AD1-C43F33F7E3C3") + }, "Bearer")); + + var request = new MerchantDailyPerformanceSummaryRequest + { + MerchantReportingId = 12345, + StartDate = new DateTime(2026, 7, 1), + EndDate = new DateTime(2026, 7, 1) + }; + + MerchantDailyPerformanceSummaryRequest? capturedRequest = null; + Guid capturedEstateId = Guid.Empty; + + var applicationService = new Mock(MockBehavior.Strict); + applicationService + .Setup(a => a.GetMerchantDailyPerformanceSummary(It.IsAny(), It.IsAny(), It.IsAny())) + .Callback((estateId, payload, _) => + { + capturedEstateId = estateId; + capturedRequest = payload; + }) + .ReturnsAsync(Result.Success(new TransactionProcessorACL.Models.MerchantDailyPerformanceSummaryResponse())); + + var result = await ReportingHandlers.GetMerchantDailyPerformanceSummary(user, request, applicationService.Object, CancellationToken.None); + + result.ShouldNotBeNull(); + capturedEstateId.ShouldBe(Guid.Parse("1C8354B7-B97A-46EA-9AD1-C43F33F7E3C3")); + capturedRequest.ShouldNotBeNull(); + capturedRequest!.MerchantReportingId.ShouldBe(12345); + applicationService.Verify(a => a.GetMerchantDailyPerformanceSummary(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); + } +} diff --git a/TransactionProcessorACL.Tests/Handlers/TransactionHandlersTests.cs b/TransactionProcessorACL.Tests/Handlers/TransactionHandlersTests.cs index d3c5895..e34a01d 100644 --- a/TransactionProcessorACL.Tests/Handlers/TransactionHandlersTests.cs +++ b/TransactionProcessorACL.Tests/Handlers/TransactionHandlersTests.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Security.Claims; using System.Threading; @@ -58,4 +59,5 @@ public async Task PerformSaleTransaction_PassesBusinessFieldsIntoCommand() capturedCommand.AdditionalRequestMetadata["amount"].ShouldBe("1000.00"); mediator.Verify(m => m.Send(It.IsAny(), It.IsAny()), Times.Once); } + } diff --git a/TransactionProcessorACL/Bootstrapper/ClientRegistry.cs b/TransactionProcessorACL/Bootstrapper/ClientRegistry.cs index 2dea17b..8c6f2d5 100644 --- a/TransactionProcessorACL/Bootstrapper/ClientRegistry.cs +++ b/TransactionProcessorACL/Bootstrapper/ClientRegistry.cs @@ -8,6 +8,7 @@ namespace TransactionProcessorACL.Bootstrapper using Shared.Serialisation; using System; using System.Diagnostics.CodeAnalysis; + using TransactionProcessorACL.BusinessLogic.BackendAPI; using TransactionProcessorACL.Common; using TransactionProcessor.Client; @@ -32,6 +33,8 @@ public ClientRegistry() .AddHttpMessageHandler(); this.RegisterHttpClient() .AddHttpMessageHandler(); + this.RegisterHttpClient() + .AddHttpMessageHandler(); Func resolver(IServiceProvider container) => serviceName => ConfigurationReader.GetBaseServerUri(serviceName).OriginalString; this.AddSingleton>(resolver); } diff --git a/TransactionProcessorACL/Endpoints/ReportingEndpoints.cs b/TransactionProcessorACL/Endpoints/ReportingEndpoints.cs new file mode 100644 index 0000000..0ac0d31 --- /dev/null +++ b/TransactionProcessorACL/Endpoints/ReportingEndpoints.cs @@ -0,0 +1,21 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Routing; +using Shared.Authorisation; +using TransactionProcessorACL.Handlers; + +namespace TransactionProcessorACL.Endpoints; + +public static class ReportingEndpoints +{ + private const string BaseRoute = "/api/reporting"; + + public static IEndpointRouteBuilder MapReportingEndpoints(this IEndpointRouteBuilder app) + { + var group = app.MapGroup(BaseRoute).RequireAuthorization().RequireAuthorization(AuthorizationExtensions.PolicyNames.PasswordTokenOnlyPolicy); + + // POST /api/reporting/dailymerchantprformancesummary + group.MapPost("dailymerchantprformancesummary", ReportingHandlers.GetMerchantDailyPerformanceSummary); + + return app; + } +} diff --git a/TransactionProcessorACL/Endpoints/TransactionEndpoints.cs b/TransactionProcessorACL/Endpoints/TransactionEndpoints.cs index b9c76a3..caca659 100644 --- a/TransactionProcessorACL/Endpoints/TransactionEndpoints.cs +++ b/TransactionProcessorACL/Endpoints/TransactionEndpoints.cs @@ -38,4 +38,4 @@ public static IEndpointRouteBuilder MapTransactionEndpoints(this IEndpointRouteB return app; } } -} \ No newline at end of file +} diff --git a/TransactionProcessorACL/Handlers/ReportingHandlers.cs b/TransactionProcessorACL/Handlers/ReportingHandlers.cs new file mode 100644 index 0000000..3911fa1 --- /dev/null +++ b/TransactionProcessorACL/Handlers/ReportingHandlers.cs @@ -0,0 +1,29 @@ +using System; +using System.Linq; +using System.Security.Claims; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Shared.General; +using Shared.Results.Web; +using SimpleResults; +using TransactionProcessorACL.DataTransferObjects.Requests; +using TransactionProcessorACL.Models; + +namespace TransactionProcessorACL.Handlers; + +public static class ReportingHandlers +{ + public static async Task GetMerchantDailyPerformanceSummary(ClaimsPrincipal user, + MerchantDailyPerformanceSummaryRequest request, + TransactionProcessorACL.BusinessLogic.Services.ITransactionProcessorACLApplicationService applicationService, + CancellationToken cancellationToken) + { + Result estateIdResult = Helpers.GetRequiredEstateClaim(user); + if (estateIdResult.IsFailed) + return ResponseFactory.FromResult(Result.Forbidden()); + + Result result = await applicationService.GetMerchantDailyPerformanceSummary(estateIdResult.Data, request, cancellationToken); + return ResponseFactory.FromResult(result, response => response); + } +} diff --git a/TransactionProcessorACL/Handlers/TransactionHandlers.cs b/TransactionProcessorACL/Handlers/TransactionHandlers.cs index dcdee17..f9981c4 100644 --- a/TransactionProcessorACL/Handlers/TransactionHandlers.cs +++ b/TransactionProcessorACL/Handlers/TransactionHandlers.cs @@ -10,6 +10,7 @@ using System.Threading.Tasks; using TransactionProcessorACL.BusinessLogic.Requests; using TransactionProcessorACL.DataTransferObjects; +using TransactionProcessorACL.DataTransferObjects.Requests; using TransactionProcessorACL.Factories; using TransactionProcessorACL.Models; @@ -109,4 +110,13 @@ public static class Helpers return Result.Success((estateId, merchantId)); } + + public static Result GetRequiredEstateClaim(ClaimsPrincipal user) + { + Claim? estateClaim = user.Claims.FirstOrDefault(c => string.Equals(c.Type, "estateId", StringComparison.OrdinalIgnoreCase)); + if (!Guid.TryParse(estateClaim?.Value, out Guid estateId)) + return Result.Failure("No Claim found for Estate Id"); + + return Result.Success(estateId); + } } diff --git a/TransactionProcessorACL/Startup.cs b/TransactionProcessorACL/Startup.cs index 93f5c75..6465d9d 100644 --- a/TransactionProcessorACL/Startup.cs +++ b/TransactionProcessorACL/Startup.cs @@ -111,6 +111,7 @@ private static void ConfigureEndpoints(IApplicationBuilder app) private static void MapEndpoints(IEndpointRouteBuilder endpoints) { endpoints.MapMerchantEndpoints(); + endpoints.MapReportingEndpoints(); endpoints.MapTransactionEndpoints(); endpoints.MapVoucherEndpoints(); endpoints.MapHealthChecks("health", CreateHealthCheckOptions(Shared.HealthChecks.HealthCheckMiddleware.WriteResponse)); diff --git a/TransactionProcessorACL/appsettings.json b/TransactionProcessorACL/appsettings.json index 32d6052..fbcd1cd 100644 --- a/TransactionProcessorACL/appsettings.json +++ b/TransactionProcessorACL/appsettings.json @@ -2,7 +2,8 @@ "AppSettings": { "ClientId": "serviceClient", "ClientSecret": "d192cbc46d834d0da90e8a9d50ded543", - "MinimumSupportedApplicationVersion": "1.0.5" + "MinimumSupportedApplicationVersion": "1.0.5", + "EstateReportingApi": "http://127.0.0.1:5011" }, "AuditSettings": { "RequestAuditStreamLifetimeDays": 7