diff --git a/EstateManagementUI.BlazorServer/Components/Pages/Operators/Edit.razor b/EstateManagementUI.BlazorServer/Components/Pages/Operators/Edit.razor index 41a4ceaf..0b10b2c5 100644 --- a/EstateManagementUI.BlazorServer/Components/Pages/Operators/Edit.razor +++ b/EstateManagementUI.BlazorServer/Components/Pages/Operators/Edit.razor @@ -133,7 +133,7 @@ else } -@code { + @code { [Parameter] public Guid OperatorId { get; set; } @@ -145,11 +145,16 @@ else private string? errorMessage; private string? successMessage; - protected override async Task OnInitializedAsync() + protected override async Task OnAfterRenderAsync(bool firstRender) { + if (!firstRender) + { + await base.OnAfterRenderAsync(firstRender); + return; + } + await RequirePermission(PermissionSection.Operator, PermissionFunction.Edit); await LoadOperator(); - } private async Task LoadOperator() @@ -158,10 +163,9 @@ else { isLoading = true; var correlationId = new CorrelationId(Guid.NewGuid()); - var estateId = Guid.Parse("11111111-1111-1111-1111-111111111111"); - var accessToken = "stubbed-token"; + var estateId = await GetEstateId(); - var result = await Mediator.Send(new OperatorQueries.GetOperatorQuery(correlationId, accessToken, estateId, OperatorId)); + var result = await Mediator.Send(new OperatorQueries.GetOperatorQuery(correlationId, estateId, OperatorId)); if (result.IsSuccess && result.Data != null) { diff --git a/EstateManagementUI.BlazorServer/Components/Pages/Operators/View.razor b/EstateManagementUI.BlazorServer/Components/Pages/Operators/View.razor index 9626c730..9a09fdfe 100644 --- a/EstateManagementUI.BlazorServer/Components/Pages/Operators/View.razor +++ b/EstateManagementUI.BlazorServer/Components/Pages/Operators/View.razor @@ -74,45 +74,3 @@ } - -@code { - [Parameter] - public Guid OperatorId { get; set; } - - private OperatorModel? operatorModel; - private bool isLoading = true; - - protected override async Task OnInitializedAsync() - { - await RequirePermission(PermissionSection.Operator, PermissionFunction.View); - - await LoadOperator(); - } - - private async Task LoadOperator() - { - try - { - isLoading = true; - var correlationId = new CorrelationId(Guid.NewGuid()); - var estateId = Guid.Parse("11111111-1111-1111-1111-111111111111"); - var accessToken = "stubbed-token"; - - var result = await Mediator.Send(new OperatorQueries.GetOperatorQuery(correlationId, accessToken, estateId, OperatorId)); - - if (result.IsSuccess && result.Data != null) - { - operatorModel = ModelFactory.ConvertFrom(result.Data); - } - } - finally - { - isLoading = false; - } - } - - private void BackToList() - { - NavigationManager.NavigateTo("/operators"); - } -} diff --git a/EstateManagementUI.BlazorServer/Components/Pages/Operators/View.razor.cs b/EstateManagementUI.BlazorServer/Components/Pages/Operators/View.razor.cs new file mode 100644 index 00000000..230bf6d2 --- /dev/null +++ b/EstateManagementUI.BlazorServer/Components/Pages/Operators/View.razor.cs @@ -0,0 +1,57 @@ +using EstateManagementUI.BlazorServer.Factories; +using EstateManagementUI.BlazorServer.Models; +using EstateManagementUI.BlazorServer.Permissions; +using EstateManagementUI.BusinessLogic.Requests; +using Microsoft.AspNetCore.Components; + +namespace EstateManagementUI.BlazorServer.Components.Pages.Operators +{ + public partial class View + { + [Parameter] + public Guid OperatorId { get; set; } + + private OperatorModel? operatorModel; + private bool isLoading = true; + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (!firstRender) + { + await base.OnAfterRenderAsync(firstRender); + return; + } + + await RequirePermission(PermissionSection.Operator, PermissionFunction.View); + + await LoadOperator(); + } + + private async Task LoadOperator() + { + try + { + isLoading = true; + var correlationId = new CorrelationId(Guid.NewGuid()); + var estateId = await this.GetEstateId(); + + var result = await Mediator.Send(new OperatorQueries.GetOperatorQuery(correlationId, estateId, OperatorId)); + + if (result.IsSuccess && result.Data != null) + { + operatorModel = ModelFactory.ConvertFrom(result.Data); + } + } + finally + { + isLoading = false; + this.StateHasChanged(); + } + } + + private void BackToList() + { + NavigationManager.NavigateTo("/operators"); + } + } +} diff --git a/EstateManagmentUI.BusinessLogic/BackendAPI/DataTransferObjects/DataTransferObjects.cs b/EstateManagmentUI.BusinessLogic/BackendAPI/DataTransferObjects/DataTransferObjects.cs index 19b70b8f..62c410f1 100644 --- a/EstateManagmentUI.BusinessLogic/BackendAPI/DataTransferObjects/DataTransferObjects.cs +++ b/EstateManagmentUI.BusinessLogic/BackendAPI/DataTransferObjects/DataTransferObjects.cs @@ -178,6 +178,10 @@ public class Operator public String Name { get; set; } [JsonProperty("operator_reporting_id")] public Int32 OperatorReportingId { get; set; } + [JsonProperty("require_custom_merchant_number")] + public Boolean RequireCustomMerchantNumber { get; set; } + [JsonProperty("require_custom_terminal_number")] + public Boolean RequireCustomTerminalNumber { get; set; } } public class MerchantOperator diff --git a/EstateManagmentUI.BusinessLogic/BackendAPI/IEstateReportingApiClient.cs b/EstateManagmentUI.BusinessLogic/BackendAPI/IEstateReportingApiClient.cs index c46989ec..a9409131 100644 --- a/EstateManagmentUI.BusinessLogic/BackendAPI/IEstateReportingApiClient.cs +++ b/EstateManagmentUI.BusinessLogic/BackendAPI/IEstateReportingApiClient.cs @@ -22,6 +22,11 @@ Task>> GetOperators(String accessToken, Guid estateId, CancellationToken cancellationToken); + Task> GetOperator(String accessToken, + Guid estateId, + Guid operatorId, + CancellationToken cancellationToken); + Task>> GetComparisonDates(String accessToken, Guid estateId, CancellationToken cancellationToken); Task> GetMerchantKpi(String accessToken, Guid estateId, CancellationToken cancellationToken); @@ -81,6 +86,34 @@ public EstateReportingApiClient(Func baseAddressResolver, this.BaseAddressResolver = baseAddressResolver; } + public async Task> GetOperator(String accessToken, + Guid estateId, + Guid operatorId, + CancellationToken cancellationToken) { + String requestUri = this.BuildRequestUrl($"/api/operators/{operatorId}"); + + try + { + List<(String headerName, String headerValue)> additionalHeaders = [ + (EstateIdHeaderName, estateId.ToString()) + ]; + + Result result = await this.SendHttpGetRequest(requestUri, accessToken, additionalHeaders, cancellationToken); + + if (result.IsFailed) + return ResultHelpers.CreateFailure(result); + + return result; + } + catch (Exception ex) + { + // An exception has occurred, add some additional information to the message + Exception exception = new Exception($"Error getting operators {estateId}.", ex); + + return Result.Failure(exception.Message); + } + } + public async Task> GetEstate(String accessToken, Guid estateId, CancellationToken cancellationToken) { diff --git a/EstateManagmentUI.BusinessLogic/Client/APIModelFactory.cs b/EstateManagmentUI.BusinessLogic/Client/APIModelFactory.cs index 3e5cdb4c..4097fa3b 100644 --- a/EstateManagmentUI.BusinessLogic/Client/APIModelFactory.cs +++ b/EstateManagmentUI.BusinessLogic/Client/APIModelFactory.cs @@ -99,35 +99,46 @@ public static EstateModel ConvertFrom(Estate apiResultData) { return model; } - - public static List ConvertFrom(List apiResultData) { +} + +public static class FactoryExtensions{ + + public static OperatorModel ToOperator(this Operator apiResultData) { + OperatorModel model = new() { + Name = apiResultData.Name, + OperatorId = apiResultData.OperatorId, + RequireCustomMerchantNumber = apiResultData.RequireCustomMerchantNumber, + RequireCustomTerminalNumber = apiResultData.RequireCustomTerminalNumber + }; + return model; + } + + public static List ToOperator(this List apiResultData) + { List operators = new(); - foreach (EstateOperator estateOperator in apiResultData) { - operators.Add(new OperatorModel() { - Name = estateOperator.Name, - OperatorId = estateOperator.OperatorId, - RequireCustomMerchantNumber = estateOperator.RequireCustomMerchantNumber, - RequireCustomTerminalNumber = estateOperator.RequireCustomTerminalNumber - }); + foreach (Operator op in apiResultData) { + operators.Add(op.ToOperator()); } + return operators; } - public static List ConvertFrom(List apiResultData) { + public static List ToOperator(this List apiResultData) + { List operators = new(); - foreach (Operator op in apiResultData) + foreach (EstateOperator estateOperator in apiResultData) { operators.Add(new OperatorModel() { - Name = op.Name, - OperatorId = op.OperatorId + Name = estateOperator.Name, + OperatorId = estateOperator.OperatorId, + RequireCustomMerchantNumber = estateOperator.RequireCustomMerchantNumber, + RequireCustomTerminalNumber = estateOperator.RequireCustomTerminalNumber }); } return operators; } -} -public static class FactoryExtensions{ public static List ToRecentMerchant(this List apiResultData) { List merchants = new(); diff --git a/EstateManagmentUI.BusinessLogic/Client/EstateMethods.cs b/EstateManagmentUI.BusinessLogic/Client/EstateMethods.cs index 990e4db6..e40ca051 100644 --- a/EstateManagmentUI.BusinessLogic/Client/EstateMethods.cs +++ b/EstateManagmentUI.BusinessLogic/Client/EstateMethods.cs @@ -53,7 +53,7 @@ public async Task>> GetEstateAssignedOperators(Estate if (apiResult.IsFailed) return ResultHelpers.CreateFailure(apiResult); - List estateOperators = APIModelFactory.ConvertFrom(apiResult.Data); + List estateOperators = apiResult.Data.ToOperator(); return Result.Success(estateOperators); } diff --git a/EstateManagmentUI.BusinessLogic/Client/OperatorMethods.cs b/EstateManagmentUI.BusinessLogic/Client/OperatorMethods.cs index 885040fb..ebcd022a 100644 --- a/EstateManagmentUI.BusinessLogic/Client/OperatorMethods.cs +++ b/EstateManagmentUI.BusinessLogic/Client/OperatorMethods.cs @@ -12,6 +12,9 @@ public partial interface IApiClient { Task>> GetOperators(OperatorQueries.GetOperatorsQuery request, CancellationToken cancellationToken); + + Task> GetOperator(OperatorQueries.GetOperatorQuery request, + CancellationToken cancellationToken); } public partial class ApiClient : IApiClient { @@ -27,7 +30,25 @@ public async Task>> GetOperators(OperatorQueries.GetO if (apiResult.IsFailed) return ResultHelpers.CreateFailure(apiResult); - List operatorModels = APIModelFactory.ConvertFrom(apiResult.Data); + List operatorModels = apiResult.Data.ToOperator(); + + return Result.Success(operatorModels); + } + + public async Task> GetOperator(OperatorQueries.GetOperatorQuery request, + CancellationToken cancellationToken) + { + // Get a token here + var token = await this.GetToken(cancellationToken); + if (token.IsFailed) + return ResultHelpers.CreateFailure(token); + + var apiResult = await this.EstateReportingApiClient.GetOperator(token.Data, request.EstateId, request.OperatorId, cancellationToken); + + if (apiResult.IsFailed) + return ResultHelpers.CreateFailure(apiResult); + + OperatorModel operatorModels = apiResult.Data.ToOperator(); return Result.Success(operatorModels); } diff --git a/EstateManagmentUI.BusinessLogic/RequestHandlers/DateRequestHandler.cs b/EstateManagmentUI.BusinessLogic/RequestHandlers/DateRequestHandler.cs index 168f0462..41f60e96 100644 --- a/EstateManagmentUI.BusinessLogic/RequestHandlers/DateRequestHandler.cs +++ b/EstateManagmentUI.BusinessLogic/RequestHandlers/DateRequestHandler.cs @@ -240,7 +240,7 @@ public async Task>> Handle(OperatorQueries.GetOperato } public async Task> Handle(OperatorQueries.GetOperatorQuery request, CancellationToken cancellationToken) { - return Result.Success(StubTestData.GetMockOperator()); + return await this.ApiClient.GetOperator(request, cancellationToken); } public async Task Handle(Commands.CreateOperatorCommand request, CancellationToken cancellationToken) { diff --git a/EstateManagmentUI.BusinessLogic/Requests/Requests.cs b/EstateManagmentUI.BusinessLogic/Requests/Requests.cs index 006bcd8a..0c9383b0 100644 --- a/EstateManagmentUI.BusinessLogic/Requests/Requests.cs +++ b/EstateManagmentUI.BusinessLogic/Requests/Requests.cs @@ -36,7 +36,7 @@ public record GetContractQuery(CorrelationId CorrelationId, string AccessToken, public class OperatorQueries { public record GetOperatorsQuery(CorrelationId CorrelationId, Guid EstateId) : IRequest>>; - public record GetOperatorQuery(CorrelationId CorrelationId, string AccessToken, Guid EstateId, Guid OperatorId) : IRequest>; + public record GetOperatorQuery(CorrelationId CorrelationId, Guid EstateId, Guid OperatorId) : IRequest>; } public static class Queries