Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ else
}
</div>

@code {
@code {
[Parameter]
public Guid OperatorId { get; set; }

Expand All @@ -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()
Expand All @@ -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)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,45 +74,3 @@
</div>
}
</div>

@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");
}
}
Original file line number Diff line number Diff line change
@@ -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");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -175,9 +175,13 @@
[JsonProperty("operator_id")]
public Guid OperatorId { get; set; }
[JsonProperty("name")]
public String Name { get; set; }

Check warning on line 178 in EstateManagmentUI.BusinessLogic/BackendAPI/DataTransferObjects/DataTransferObjects.cs

View workflow job for this annotation

GitHub Actions / Build and Unit Test

Non-nullable property 'Name' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.
[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
Expand All @@ -187,11 +191,11 @@
[JsonProperty("operator_id")]
public Guid OperatorId { get; set; }
[JsonProperty("operator_name")]
public String OperatorName { get; set; }

Check warning on line 194 in EstateManagmentUI.BusinessLogic/BackendAPI/DataTransferObjects/DataTransferObjects.cs

View workflow job for this annotation

GitHub Actions / Build and Unit Test

Non-nullable property 'OperatorName' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.
[JsonProperty("merchant_number")]
public String MerchantNumber { get; set; }

Check warning on line 196 in EstateManagmentUI.BusinessLogic/BackendAPI/DataTransferObjects/DataTransferObjects.cs

View workflow job for this annotation

GitHub Actions / Build and Unit Test

Non-nullable property 'MerchantNumber' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.
[JsonProperty("terminal_number")]
public String TerminalNumber { get; set; }

Check warning on line 198 in EstateManagmentUI.BusinessLogic/BackendAPI/DataTransferObjects/DataTransferObjects.cs

View workflow job for this annotation

GitHub Actions / Build and Unit Test

Non-nullable property 'TerminalNumber' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.
[JsonProperty("is_deleted")]
public Boolean IsDeleted { get; set; }
}
Expand All @@ -204,13 +208,13 @@
public Guid ContractId { get; set; }
[JsonProperty("contract_name")]

public String ContractName { get; set; }

Check warning on line 211 in EstateManagmentUI.BusinessLogic/BackendAPI/DataTransferObjects/DataTransferObjects.cs

View workflow job for this annotation

GitHub Actions / Build and Unit Test

Non-nullable property 'ContractName' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.
[JsonProperty("is_deleted")]
public Boolean IsDeleted { get; set; }
[JsonProperty("contract_products")]
public List<MerchantContractProduct> ContractProducts { get; set; }

Check warning on line 215 in EstateManagmentUI.BusinessLogic/BackendAPI/DataTransferObjects/DataTransferObjects.cs

View workflow job for this annotation

GitHub Actions / Build and Unit Test

Non-nullable property 'ContractProducts' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.
[JsonProperty("operator_name")]
public String OperatorName { get; set; }

Check warning on line 217 in EstateManagmentUI.BusinessLogic/BackendAPI/DataTransferObjects/DataTransferObjects.cs

View workflow job for this annotation

GitHub Actions / Build and Unit Test

Non-nullable property 'OperatorName' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.
}

public class MerchantContractProduct
Expand All @@ -222,9 +226,9 @@
[JsonProperty("product_id")]
public Guid ProductId { get; set; }
[JsonProperty("product_name")]
public String ProductName { get; set; }

Check warning on line 229 in EstateManagmentUI.BusinessLogic/BackendAPI/DataTransferObjects/DataTransferObjects.cs

View workflow job for this annotation

GitHub Actions / Build and Unit Test

Non-nullable property 'ProductName' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.
[JsonProperty("display_text")]
public String DisplayText { get; set; }

Check warning on line 231 in EstateManagmentUI.BusinessLogic/BackendAPI/DataTransferObjects/DataTransferObjects.cs

View workflow job for this annotation

GitHub Actions / Build and Unit Test

Non-nullable property 'DisplayText' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.
[JsonProperty("product_type")]
public Int32 ProductType { get; set; }
[JsonProperty("value")]
Expand All @@ -238,7 +242,7 @@
[JsonProperty("device_id")]
public Guid DeviceId { get; set; }
[JsonProperty("device_identifier")]
public String DeviceIdentifier { get; set; }

Check warning on line 245 in EstateManagmentUI.BusinessLogic/BackendAPI/DataTransferObjects/DataTransferObjects.cs

View workflow job for this annotation

GitHub Actions / Build and Unit Test

Non-nullable property 'DeviceIdentifier' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.
[JsonProperty("is_deleted")]
public Boolean IsDeleted { get; set; }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ Task<Result<List<Operator>>> GetOperators(String accessToken,
Guid estateId,
CancellationToken cancellationToken);

Task<Result<Operator>> GetOperator(String accessToken,
Guid estateId,
Guid operatorId,
CancellationToken cancellationToken);

Task<Result<List<ComparisonDate>>> GetComparisonDates(String accessToken, Guid estateId, CancellationToken cancellationToken);
Task<Result<MerchantKpi>> GetMerchantKpi(String accessToken, Guid estateId, CancellationToken cancellationToken);

Expand Down Expand Up @@ -81,6 +86,34 @@ public EstateReportingApiClient(Func<String, String> baseAddressResolver,
this.BaseAddressResolver = baseAddressResolver;
}

public async Task<Result<Operator>> 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<Operator> result = await this.SendHttpGetRequest<Operator>(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<Result<Estate>> GetEstate(String accessToken,
Guid estateId,
CancellationToken cancellationToken) {
Expand Down
41 changes: 26 additions & 15 deletions EstateManagmentUI.BusinessLogic/Client/APIModelFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,35 +99,46 @@ public static EstateModel ConvertFrom(Estate apiResultData) {

return model;
}

public static List<OperatorModel> ConvertFrom(List<EstateOperator> 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<OperatorModel> ToOperator(this List<Operator> apiResultData)
{
List<OperatorModel> 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<OperatorModel> ConvertFrom(List<Operator> apiResultData) {
public static List<OperatorModel> ToOperator(this List<EstateOperator> apiResultData)
{
List<OperatorModel> 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<RecentMerchantsModel> ToRecentMerchant(this List<Merchant> apiResultData)
{
List<RecentMerchantsModel> merchants = new();
Expand Down
2 changes: 1 addition & 1 deletion EstateManagmentUI.BusinessLogic/Client/EstateMethods.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public async Task<Result<List<OperatorModel>>> GetEstateAssignedOperators(Estate
if (apiResult.IsFailed)
return ResultHelpers.CreateFailure(apiResult);

List<OperatorModel> estateOperators = APIModelFactory.ConvertFrom(apiResult.Data);
List<OperatorModel> estateOperators = apiResult.Data.ToOperator();

return Result.Success(estateOperators);
}
Expand Down
23 changes: 22 additions & 1 deletion EstateManagmentUI.BusinessLogic/Client/OperatorMethods.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ public partial interface IApiClient
{
Task<Result<List<OperatorModel>>> GetOperators(OperatorQueries.GetOperatorsQuery request,
CancellationToken cancellationToken);

Task<Result<OperatorModel>> GetOperator(OperatorQueries.GetOperatorQuery request,
CancellationToken cancellationToken);
}

public partial class ApiClient : IApiClient {
Expand All @@ -27,7 +30,25 @@ public async Task<Result<List<OperatorModel>>> GetOperators(OperatorQueries.GetO
if (apiResult.IsFailed)
return ResultHelpers.CreateFailure(apiResult);

List<OperatorModel> operatorModels = APIModelFactory.ConvertFrom(apiResult.Data);
List<OperatorModel> operatorModels = apiResult.Data.ToOperator();

return Result.Success(operatorModels);
}

public async Task<Result<OperatorModel>> 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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ public async Task<Result<List<OperatorModel>>> Handle(OperatorQueries.GetOperato
}
public async Task<Result<OperatorModel>> Handle(OperatorQueries.GetOperatorQuery request,
CancellationToken cancellationToken) {
return Result.Success(StubTestData.GetMockOperator());
return await this.ApiClient.GetOperator(request, cancellationToken);
}
public async Task<Result> Handle(Commands.CreateOperatorCommand request,
CancellationToken cancellationToken) {
Expand Down
2 changes: 1 addition & 1 deletion EstateManagmentUI.BusinessLogic/Requests/Requests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public record GetContractQuery(CorrelationId CorrelationId, string AccessToken,

public class OperatorQueries {
public record GetOperatorsQuery(CorrelationId CorrelationId, Guid EstateId) : IRequest<Result<List<OperatorModel>>>;
public record GetOperatorQuery(CorrelationId CorrelationId, string AccessToken, Guid EstateId, Guid OperatorId) : IRequest<Result<OperatorModel>>;
public record GetOperatorQuery(CorrelationId CorrelationId, Guid EstateId, Guid OperatorId) : IRequest<Result<OperatorModel>>;
}

public static class Queries
Expand Down