Skip to content

Commit

Permalink
refactor: remove dependency towards Microsoft.AspNetCore.WebUtilities
Browse files Browse the repository at this point in the history
  • Loading branch information
Tr00d committed Nov 22, 2023
1 parent 2cb16e3 commit 0e38b86
Show file tree
Hide file tree
Showing 8 changed files with 50 additions and 27 deletions.
24 changes: 24 additions & 0 deletions Vonage.Common/UriHelpers.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System.Collections.Generic;
using System.Linq;
using System.Text.Encodings.Web;

namespace Vonage.Common;

/// <summary>
/// Exposes helpers methods when working with queries.
/// </summary>
public static class UriHelpers
{
/// <summary>
/// Builds a URI from a base URI and query parameters.
/// </summary>
/// <param name="baseUri">The base URI.</param>
/// <param name="parameters">The query parameters.</param>
/// <returns>The URI.</returns>
public static string BuildUri(string baseUri, Dictionary<string, string> parameters)
{
var queryParams = string.Join("&", parameters
.Select(pair => $"{UrlEncoder.Default.Encode(pair.Key)}={UrlEncoder.Default.Encode(pair.Value)}"));
return queryParams.Length > 0 ? $"{baseUri}?{queryParams}" : baseUri;
}
}
4 changes: 2 additions & 2 deletions Vonage/Meetings/DeleteTheme/DeleteThemeRequest.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
using System.Net.Http;
using Microsoft.AspNetCore.WebUtilities;
using Vonage.Common;
using Vonage.Common.Client;

namespace Vonage.Meetings.DeleteTheme;
Expand Down Expand Up @@ -35,7 +35,7 @@ public HttpRequestMessage BuildRequestMessage() =>

/// <inheritdoc />
public string GetEndpointPath() =>
QueryHelpers.AddQueryString($"/v1/meetings/themes/{this.ThemeId}", this.GetQueryStringParameters());
UriHelpers.BuildUri($"/v1/meetings/themes/{this.ThemeId}", this.GetQueryStringParameters());

private Dictionary<string, string> GetQueryStringParameters()
{
Expand Down
4 changes: 2 additions & 2 deletions Vonage/Meetings/GetRooms/GetRoomsRequest.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.Collections.Generic;
using System.Net.Http;
using Microsoft.AspNetCore.WebUtilities;
using Vonage.Common;
using Vonage.Common.Client;
using Vonage.Common.Monads;

Expand Down Expand Up @@ -41,7 +41,7 @@ public HttpRequestMessage BuildRequestMessage() =>
.Build();

/// <inheritdoc />
public string GetEndpointPath() => QueryHelpers.AddQueryString(DefaultEndpoint, this.GetQueryStringParameters());
public string GetEndpointPath() => UriHelpers.BuildUri(DefaultEndpoint, this.GetQueryStringParameters());

private Dictionary<string, string> GetQueryStringParameters()
{
Expand Down
4 changes: 2 additions & 2 deletions Vonage/Meetings/GetRoomsByTheme/GetRoomsByThemeRequest.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
using System.Net.Http;
using Microsoft.AspNetCore.WebUtilities;
using Vonage.Common;
using Vonage.Common.Client;
using Vonage.Common.Monads;

Expand Down Expand Up @@ -44,7 +44,7 @@ public HttpRequestMessage BuildRequestMessage() =>
.Build();

/// <inheritdoc />
public string GetEndpointPath() => QueryHelpers.AddQueryString($"/v1/meetings/themes/{this.ThemeId}/rooms",
public string GetEndpointPath() => UriHelpers.BuildUri($"/v1/meetings/themes/{this.ThemeId}/rooms",
this.GetQueryStringParameters());

private Dictionary<string, string> GetQueryStringParameters()
Expand Down
4 changes: 2 additions & 2 deletions Vonage/SubAccounts/GetTransfers/GetTransfersRequest.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
using System.Net.Http;
using Microsoft.AspNetCore.WebUtilities;
using Vonage.Common;
using Vonage.Common.Client;
using Vonage.Common.Monads;

Expand Down Expand Up @@ -45,7 +45,7 @@ public HttpRequestMessage BuildRequestMessage() => VonageRequestBuilder
.Build();

/// <inheritdoc />
public string GetEndpointPath() => QueryHelpers.AddQueryString($"/accounts/{this.ApiKey}/{this.Endpoint}",
public string GetEndpointPath() => UriHelpers.BuildUri($"/accounts/{this.ApiKey}/{this.Endpoint}",
this.GetQueryStringParameters());

private Dictionary<string, string> GetQueryStringParameters()
Expand Down
5 changes: 2 additions & 3 deletions Vonage/Users/GetUsers/GetUsersRequest.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using System.Net.Http;
using EnumsNET;
using Microsoft.AspNetCore.WebUtilities;
using Vonage.Common;
using Vonage.Common.Client;
using Vonage.Common.Monads;
using Vonage.ProactiveConnect;
Expand Down Expand Up @@ -52,8 +52,7 @@ public HttpRequestMessage BuildRequestMessage() => VonageRequestBuilder
.Build();

/// <inheritdoc />
public string GetEndpointPath() => QueryHelpers.AddQueryString("/v1/users",
this.GetQueryStringParameters());
public string GetEndpointPath() => UriHelpers.BuildUri("/v1/users", this.GetQueryStringParameters());

private Dictionary<string, string> GetQueryStringParameters()
{
Expand Down
31 changes: 16 additions & 15 deletions Vonage/Users/GetUsers/GetUsersResponse.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using System;
using System.Text.Json.Serialization;
using System.Web;
using EnumsNET;
using Microsoft.AspNetCore.WebUtilities;
using Vonage.Common;
using Vonage.Common.Failures;
using Vonage.Common.Monads;
Expand All @@ -12,7 +12,11 @@ namespace Vonage.Users.GetUsers;
/// <summary>
/// </summary>
/// <param name="PageSize">The amount of records returned in this response.</param>
/// <param name="Embedded">A list of user objects. See <see href="https://developer.vonage.com/en/api/application.v2#getUser">the get details</see> of a specific user response fields for a description of the nested objects</param>
/// <param name="Embedded">
/// A list of user objects. See
/// <see href="https://developer.vonage.com/en/api/application.v2#getUser">the get details</see> of a specific user
/// response fields for a description of the nested objects
/// </param>
/// <param name="Links">A series of links between resources in this API in the http://stateless.co/hal_specification.html.</param>
public record GetUsersResponse(
[property: JsonPropertyOrder(0)] int PageSize,
Expand All @@ -35,37 +39,34 @@ public record GetUsersHalLink(Uri Href)
/// <returns></returns>
public Result<GetUsersRequest> BuildRequest()
{
var queryValues = QueryHelpers.ParseQuery(this.Href.Query);
var name = queryValues.TryGetValue("name", out var nameValue)
? Maybe<string>.Some(nameValue.ToString())
: Maybe<string>.None;
var cursor = queryValues.TryGetValue("cursor", out var cursorValue)
? Maybe<string>.Some(cursorValue.ToString())
: Maybe<string>.None;
if (!queryValues.ContainsKey("page_size"))
var queryParameters = HttpUtility.ParseQueryString(this.Href.Query);
var name = queryParameters["name"] ?? Maybe<string>.None;
var cursor = queryParameters["cursor"] ?? Maybe<string>.None;
var pageSize = queryParameters["page_size"];
var order = queryParameters["order"];
if (pageSize is null)
{
return Result<GetUsersRequest>.FromFailure(ResultFailure.FromErrorMessage("PageSize is missing from Uri."));
}

if (!queryValues.ContainsKey("order"))
if (order is null)
{
return Result<GetUsersRequest>.FromFailure(ResultFailure.FromErrorMessage("Order is missing from Uri."));
}

return Result<GetUsersRequest>.FromSuccess(new GetUsersRequest(cursor, name,
Enums.Parse<FetchOrder>(queryValues["order"].ToString(), false, EnumFormat.Description),
int.Parse(queryValues["page_size"].ToString())));
Enums.Parse<FetchOrder>(order, false, EnumFormat.Description), int.Parse(pageSize)));
}
}

/// <summary>
/// Represents a list of user objects.
/// Represents a list of user objects.
/// </summary>
/// <param name="Users">List of users matching the provided filter.</param>
public record EmbeddedUsers(UserSummary[] Users);

/// <summary>
/// Represents a user summary.
/// Represents a user summary.
/// </summary>
/// <param name="Id">User ID</param>
/// <param name="Name">Unique name for a user</param>
Expand Down
1 change: 0 additions & 1 deletion Vonage/Vonage.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@
<PackageReference Include="Newtonsoft.Json" Version="13.0.3"/>
<PackageReference Include="Enums.NET" Version="4.0.1"/>
<PackageReference Include="Handy.DotNETCore-Compatibility.ColorTranslations" Version="0.2.1"/>
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0"/>
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0"/>
<PackageReference Include="PolySharp" Version="1.13.2">
<PrivateAssets>all</PrivateAssets>
Expand Down

0 comments on commit 0e38b86

Please sign in to comment.