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 @@ -35,6 +35,8 @@ public void EstateIndex_RendersCorrectly()
.ReturnsAsync(Result.Success(new List<RecentContractModel>()));
_mockMediator.Setup(x => x.Send(It.IsAny<Queries.GetAssignedOperatorsQuery>(), default))
.ReturnsAsync(Result.Success(new List<OperatorModel>()));
_mockMediator.Setup(x => x.Send(It.IsAny<Queries.GetOperatorsQuery>(), default))
.ReturnsAsync(Result.Success(new List<OperatorModel>()));

// Act
var cut = RenderComponent<EstateIndex>();
Expand Down Expand Up @@ -63,6 +65,8 @@ public void EstateIndex_DisplaysEstateDetails()
.ReturnsAsync(Result.Success(new List<RecentContractModel>()));
_mockMediator.Setup(x => x.Send(It.IsAny<Queries.GetAssignedOperatorsQuery>(), default))
.ReturnsAsync(Result.Success(new List<OperatorModel>()));
_mockMediator.Setup(x => x.Send(It.IsAny<Queries.GetOperatorsQuery>(), default))
.ReturnsAsync(Result.Success(new List<OperatorModel>()));

// Act
var cut = RenderComponent<EstateIndex>();
Expand All @@ -83,6 +87,8 @@ public void EstateIndex_HasCorrectPageTitle()
.ReturnsAsync(Result.Success(new List<RecentContractModel>()));
_mockMediator.Setup(x => x.Send(It.IsAny<Queries.GetAssignedOperatorsQuery>(), default))
.ReturnsAsync(Result.Success(new List<OperatorModel>()));
_mockMediator.Setup(x => x.Send(It.IsAny<Queries.GetOperatorsQuery>(), default))
.ReturnsAsync(Result.Success(new List<OperatorModel>()));

// Act
var cut = RenderComponent<EstateIndex>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ else
try
{
isLoadingOperators = true;
var result = await Mediator.Send(new Queries.GetOperatorsQuery(CorrelationIdHelper.New(), "stubbed-token", Guid.Parse("11111111-1111-1111-1111-111111111111")));
var result = await Mediator.Send(new Queries.GetOperatorsQuery(CorrelationIdHelper.New(), Guid.Parse("11111111-1111-1111-1111-111111111111")));
if (result.IsSuccess)
{
operators = ModelFactory.ConvertFrom(result.Data);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,32 +50,36 @@ protected override async Task OnAfterRenderAsync(bool firstRender)

private async Task<Result> LoadEstateData(CorrelationId correlationId, Guid estateId)
{
Result<BusinessLogic.Models.EstateModel> estateResult = await Mediator.Send(new Queries.GetEstateQuery(correlationId, estateId));
if (estateResult.IsFailed)
return ResultHelpers.CreateFailure(estateResult);
estate = ModelFactory.ConvertFrom(estateResult.Data);

Result<List<BusinessLogic.Models.RecentMerchantsModel>> merchantResult = await Mediator.Send(new Queries.GetRecentMerchantsQuery(correlationId, estateId));

if (merchantResult.IsFailed)
return ResultHelpers.CreateFailure(merchantResult);

this.merchants = ModelFactory.ConvertFrom(merchantResult.Data);
Task<Result<BusinessLogic.Models.EstateModel>> estateTask = Mediator.Send(new Queries.GetEstateQuery(correlationId, estateId));
Task<Result<List<BusinessLogic.Models.RecentMerchantsModel>>> merchantTask = Mediator.Send(new Queries.GetRecentMerchantsQuery(correlationId, estateId));
Task<Result<List<BusinessLogic.Models.RecentContractModel>>> contractsTask = Mediator.Send(new Queries.GetRecentContractsQuery(correlationId, estateId));
Task<Result<List<BusinessLogic.Models.OperatorModel>>> assignedOperatorsTask = Mediator.Send(new Queries.GetAssignedOperatorsQuery(correlationId, estateId));
Task<Result<List<BusinessLogic.Models.OperatorModel>>> allOperatorsTask= Mediator.Send(new Queries.GetOperatorsQuery(correlationId, estateId));

Result<List<BusinessLogic.Models.RecentContractModel>> contractResult = await Mediator.Send(new Queries.GetRecentContractsQuery(correlationId, estateId));

if (contractResult.IsFailed)
return ResultHelpers.CreateFailure(contractResult);
await Task.WhenAll(estateTask, merchantTask, contractsTask, assignedOperatorsTask, allOperatorsTask);

if (estateTask.Result.IsFailed)
return ResultHelpers.CreateFailure(estateTask.Result);
estate = ModelFactory.ConvertFrom(estateTask.Result.Data);

this.contracts = ModelFactory.ConvertFrom(contractResult.Data);
if (merchantTask.Result.IsFailed)
return ResultHelpers.CreateFailure(merchantTask.Result);
this.merchants = ModelFactory.ConvertFrom(merchantTask.Result.Data);

Result<List<BusinessLogic.Models.OperatorModel>> assignedOperatorsResult = await Mediator.Send(new Queries.GetAssignedOperatorsQuery(correlationId, estateId));
if (contractsTask.Result.IsFailed)
return ResultHelpers.CreateFailure(contractsTask.Result);
this.contracts = ModelFactory.ConvertFrom(contractsTask.Result.Data);

if (assignedOperatorsResult.IsFailed)
return ResultHelpers.CreateFailure(assignedOperatorsResult);
if (assignedOperatorsTask.Result.IsFailed)
return ResultHelpers.CreateFailure(assignedOperatorsTask.Result);
this.assignedOperators = ModelFactory.ConvertFrom(assignedOperatorsTask.Result.Data);

this.assignedOperators = ModelFactory.ConvertFrom(assignedOperatorsResult.Data);
if (allOperatorsTask.Result.IsFailed)
return ResultHelpers.CreateFailure(allOperatorsTask.Result);

List<OperatorModel> unfiltered = ModelFactory.ConvertFrom(allOperatorsTask.Result.Data);
this.availableOperators = unfiltered.Where(u => this.assignedOperators.Select(a => a.OperatorId).Contains(u.OperatorId) == false).ToList();

return Result.Success();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -535,7 +535,7 @@ else
var estateId = Guid.Parse("11111111-1111-1111-1111-111111111111");
var accessToken = "stubbed-token";

var result = await Mediator.Send(new Queries.GetOperatorsQuery(correlationId, accessToken, estateId));
var result = await Mediator.Send(new Queries.GetOperatorsQuery(correlationId, estateId));

if (result.IsSuccess)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@
var estateId = Guid.Parse("11111111-1111-1111-1111-111111111111");
var accessToken = "stubbed-token";

var result = await Mediator.Send(new Queries.GetOperatorsQuery(correlationId, accessToken, estateId));
var result = await Mediator.Send(new Queries.GetOperatorsQuery(correlationId, estateId));
if (result.IsSuccess)
{
operators = ModelFactory.ConvertFrom(result.Data);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,7 @@

// Load filter options
var merchantsTask = Mediator.Send(new Queries.GetMerchantsQuery(correlationId, estateId));
var operatorsTask = Mediator.Send(new Queries.GetOperatorsQuery(correlationId, accessToken, estateId));
var operatorsTask = Mediator.Send(new Queries.GetOperatorsQuery(correlationId, estateId));
var contractsTask = Mediator.Send(new Queries.GetContractsQuery(correlationId, accessToken, estateId));

await Task.WhenAll(merchantsTask, operatorsTask, contractsTask);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@

// Load filter options
var merchantsTask = Mediator.Send(new Queries.GetMerchantsQuery(correlationId, estateId));
var operatorsTask = Mediator.Send(new Queries.GetOperatorsQuery(correlationId, accessToken, estateId));
var operatorsTask = Mediator.Send(new Queries.GetOperatorsQuery(correlationId, estateId));

await Task.WhenAll(merchantsTask, operatorsTask);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@

// Load filter options
var merchantsTask = Mediator.Send(new Queries.GetMerchantsQuery(correlationId, estateId));
var operatorsTask = Mediator.Send(new Queries.GetOperatorsQuery(correlationId, accessToken, estateId));
var operatorsTask = Mediator.Send(new Queries.GetOperatorsQuery(correlationId, estateId));

await Task.WhenAll(merchantsTask, operatorsTask);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,4 +157,16 @@ public class EstateMerchant
[JsonProperty("reference")]
public string? Reference { get; set; }
}

public class Operator
{
[JsonProperty("estate_reporting_id")]
public Int32 EstateReportingId { get; set; }
[JsonProperty("operator_id")]
public Guid OperatorId { get; set; }
[JsonProperty("name")]
public String Name { get; set; }
[JsonProperty("operator_reporting_id")]
public Int32 OperatorReportingId { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@
Task<Result<List<EstateOperator>>> GetEstateAssignedOperators(String accessToken,
Guid estateId,
CancellationToken cancellationToken);

Task<Result<List<Operator>>> GetOperators(String accessToken,
Guid estateId,
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 @@ -97,6 +102,33 @@
}
}

public async Task<Result<List<Operator>>> GetOperators(String accessToken,
Guid estateId,
CancellationToken cancellationToken) {
String requestUri = this.BuildRequestUrl("/api/operators");

try
{
List<(String headerName, String headerValue)> additionalHeaders = [
(EstateIdHeaderName, estateId.ToString())
];

Result<List<Operator>> result = await this.SendHttpGetRequest<List<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<List<ComparisonDate>>> GetComparisonDates(String accessToken,
Guid estateId,
CancellationToken cancellationToken) {
Expand Down Expand Up @@ -303,24 +335,24 @@
if (alwaysInclude)
return false;

Object? defaultValue = GetDefault(value.GetType());

Check warning on line 338 in EstateManagmentUI.BusinessLogic/BackendAPI/IEstateReportingApiClient.cs

View workflow job for this annotation

GitHub Actions / Build and Unit Test

Dereference of a possibly null reference.

if (defaultValue == null && value.GetType() == typeof(String))
{
defaultValue = String.Empty;
}
return defaultValue.Equals(value);

Check warning on line 344 in EstateManagmentUI.BusinessLogic/BackendAPI/IEstateReportingApiClient.cs

View workflow job for this annotation

GitHub Actions / Build and Unit Test

Dereference of a possibly null reference.
}

public static object GetDefault(Type t)
{
Func<object> f = GetDefault<object>;
return f.Method.GetGenericMethodDefinition().MakeGenericMethod(t).Invoke(null, null);

Check warning on line 350 in EstateManagmentUI.BusinessLogic/BackendAPI/IEstateReportingApiClient.cs

View workflow job for this annotation

GitHub Actions / Build and Unit Test

Possible null reference return.
}

private static T GetDefault<T>()
{
return default(T);

Check warning on line 355 in EstateManagmentUI.BusinessLogic/BackendAPI/IEstateReportingApiClient.cs

View workflow job for this annotation

GitHub Actions / Build and Unit Test

Possible null reference return.
}

public string BuildQueryString()
Expand All @@ -341,7 +373,7 @@
queryString.Append("&");
}

queryString.Append($"{Uri.EscapeDataString(kvp.Key)}={Uri.EscapeDataString(kvp.Value.ToString())}");

Check warning on line 376 in EstateManagmentUI.BusinessLogic/BackendAPI/IEstateReportingApiClient.cs

View workflow job for this annotation

GitHub Actions / Build and Unit Test

Possible null reference argument for parameter 'stringToEscape' in 'string Uri.EscapeDataString(string stringToEscape)'.
}

return queryString.ToString();
Expand Down
13 changes: 13 additions & 0 deletions EstateManagmentUI.BusinessLogic/Client/APIModelFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -146,4 +146,17 @@ public static List<OperatorModel> ConvertFrom(List<EstateOperator> apiResultData
}
return operators;
}

public static List<OperatorModel> ConvertFrom(List<Operator> apiResultData) {
List<OperatorModel> operators = new();
foreach (Operator op in apiResultData)
{
operators.Add(new OperatorModel()
{
Name = op.Name,
OperatorId = op.OperatorId
});
}
return operators;
}
}
35 changes: 35 additions & 0 deletions EstateManagmentUI.BusinessLogic/Client/OperatorMethods.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using EstateManagementUI.BusinessLogic.Models;
using EstateManagementUI.BusinessLogic.Requests;
using Shared.Results;
using SimpleResults;
using System;
using System.Collections.Generic;
using System.Text;

namespace EstateManagementUI.BusinessLogic.Client
{
public partial interface IApiClient
{
Task<Result<List<OperatorModel>>> GetOperators(Queries.GetOperatorsQuery request,
CancellationToken cancellationToken);
}

public partial class ApiClient : IApiClient {
public async Task<Result<List<OperatorModel>>> GetOperators(Queries.GetOperatorsQuery 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.GetOperators(token.Data, request.EstateId, cancellationToken);

if (apiResult.IsFailed)
return ResultHelpers.CreateFailure(apiResult);

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

return Result.Success(operatorModels);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ public OperatorRequestHandler(IApiClient apiClient)

public async Task<Result<List<OperatorModel>>> Handle(Queries.GetOperatorsQuery request,
CancellationToken cancellationToken) {
return Result.Success(StubTestData.GetMockOperators());
return await this.ApiClient.GetOperators(request, cancellationToken);
}
public async Task<Result<OperatorModel>> Handle(Queries.GetOperatorQuery 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 @@ -18,7 +18,7 @@ public record GetAssignedOperatorsQuery(CorrelationId CorrelationId, Guid Estate
public record GetMerchantsQuery(CorrelationId CorrelationId, Guid EstateId) : IRequest<Result<List<MerchantModel>>>;
public record GetRecentMerchantsQuery(CorrelationId CorrelationId, Guid EstateId) : IRequest<Result<List<RecentMerchantsModel>>>;
public record GetRecentContractsQuery(CorrelationId CorrelationId, Guid EstateId) : IRequest<Result<List<RecentContractModel>>>;
public record GetOperatorsQuery(CorrelationId CorrelationId, string AccessToken, Guid EstateId) : IRequest<Result<List<OperatorModel>>>;
public record GetOperatorsQuery(CorrelationId CorrelationId, Guid EstateId) : IRequest<Result<List<OperatorModel>>>;
public record GetContractsQuery(CorrelationId CorrelationId, string AccessToken, Guid EstateId) : IRequest<Result<List<ContractModel>>>;
public record GetOperatorQuery(CorrelationId CorrelationId, string AccessToken, Guid EstateId, Guid OperatorId) : IRequest<Result<OperatorModel>>;
public record GetContractQuery(CorrelationId CorrelationId, string AccessToken, Guid EstateId, Guid ContractId) : IRequest<Result<ContractModel>>;
Expand Down
Loading