Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 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
176 changes: 157 additions & 19 deletions src/PureCloud.Client/Apis/ObjectsApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ namespace PureCloud.Client.Apis;
/// <inheritdoc />
public sealed class ObjectsApi : IObjectsApi
{
private readonly HttpClient _httpClient;
private readonly IHttpClientFactory _httpClientFactory;
private readonly PureCloudJsonSerializerOptions _options;

public ObjectsApi(IHttpClientFactory httpClientFactory, IOptions<PureCloudJsonSerializerOptions> options)
{
_httpClient = httpClientFactory.CreateClient(PureCloudConstants.PureCloudClientName);
_httpClientFactory = httpClientFactory;
_options = options.Value;
}

Expand All @@ -32,17 +32,19 @@ public async Task<AuthzDivision> GetAuthorizationDivisionAsync(string divisionId
parameters.Add("objectCount", UriHelper.ParameterToString(objectCount.Value));
}

var uri = UriHelper.GetUri($"api/v2/authorization/divisions/{divisionId}", parameters);
var uri = UriHelper.GetUri($"api/v2/authorization/divisions/{Uri.EscapeDataString(divisionId)}", parameters);

var response = await _httpClient.GetAsync(uri, cancellationToken);
var client = _httpClientFactory.CreateClient(PureCloudConstants.PureCloudClientName);

var response = await client.GetAsync(uri, cancellationToken);

response.EnsureSuccessStatusCode();

return await response.Content.ReadFromJsonAsync<AuthzDivision>(_options.JsonSerializerOptions, cancellationToken);
}

/// <inheritdoc />
public async Task<AuthzDivisionEntityListing> GetAuthorizationDivisionsAsync(int? pageSize = null, int? pageNumber = null, string sortBy = null, IEnumerable<string> expand = null, string nextPage = null, string previousPage = null, bool? objectCount = null, IEnumerable<string> id = null, string name = null, CancellationToken cancellationToken = default)
public async Task<AuthzDivisionEntityListing> GetAuthorizationDivisionsAsync(int? pageSize = null, int? pageNumber = null, string sortBy = null, IEnumerable<string> expands = null, string nextPage = null, string previousPage = null, bool? objectCount = null, IEnumerable<string> ids = null, string name = null, CancellationToken cancellationToken = default)
{
var parameters = new NameValueCollection();

Expand All @@ -61,11 +63,11 @@ public async Task<AuthzDivisionEntityListing> GetAuthorizationDivisionsAsync(int
parameters.Add("sortBy", UriHelper.ParameterToString(sortBy));
}

if (expand != null)
if (expands != null)
{
foreach (var item in expand)
foreach (var expand in expands)
{
parameters.Add("expand", UriHelper.ParameterToString(item));
parameters.Add("expand", UriHelper.ParameterToString(expand));
}
}

Expand All @@ -84,11 +86,11 @@ public async Task<AuthzDivisionEntityListing> GetAuthorizationDivisionsAsync(int
parameters.Add("objectCount", UriHelper.ParameterToString(objectCount.Value));
}

if (id != null)
if (ids != null)
{
foreach (var item in id)
foreach (var id in ids)
{
parameters.Add("id", UriHelper.ParameterToString(item));
parameters.Add("id", UriHelper.ParameterToString(id));
}
}

Expand All @@ -99,7 +101,9 @@ public async Task<AuthzDivisionEntityListing> GetAuthorizationDivisionsAsync(int

var uri = UriHelper.GetUri("api/v2/authorization/divisions", parameters);

var response = await _httpClient.GetAsync(uri, cancellationToken);
var client = _httpClientFactory.CreateClient(PureCloudConstants.PureCloudClientName);

var response = await client.GetAsync(uri, cancellationToken);

response.EnsureSuccessStatusCode();

Expand All @@ -111,9 +115,11 @@ public async Task<AuthzDivision> CreateAuthorizationDivisionAsync(AuthzDivision
{
ArgumentNullException.ThrowIfNull(body);

var uri = UriHelper.GetUri("api/v2/authorization/divisions", null);
var uri = "api/v2/authorization/divisions";

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This variable is not needed. You can just pass this value to the request call.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed unnecessary uri variable from CreateAuthorizationDivisionAsync method - now passing the URI string directly to PostAsJsonAsync call. Applied same pattern to all methods where uri variables were not needed. Commit: ac43793


var response = await _httpClient.PostAsJsonAsync(uri, body, _options.JsonSerializerOptions, cancellationToken);
var client = _httpClientFactory.CreateClient(PureCloudConstants.PureCloudClientName);

var response = await client.PostAsJsonAsync(uri, body, _options.JsonSerializerOptions, cancellationToken);

response.EnsureSuccessStatusCode();

Expand All @@ -127,9 +133,11 @@ public async Task<AuthzDivision> UpdateAuthorizationDivisionAsync(string divisio

ArgumentNullException.ThrowIfNull(body);

var uri = UriHelper.GetUri($"api/v2/authorization/divisions/{divisionId}", null);
var uri = $"api/v2/authorization/divisions/{Uri.EscapeDataString(divisionId)}";

var client = _httpClientFactory.CreateClient(PureCloudConstants.PureCloudClientName);

var response = await _httpClient.PutAsJsonAsync(uri, body, _options.JsonSerializerOptions, cancellationToken);
var response = await client.PutAsJsonAsync(uri, body, _options.JsonSerializerOptions, cancellationToken);

response.EnsureSuccessStatusCode();

Expand All @@ -148,10 +156,140 @@ public async Task DeleteAuthorizationDivisionAsync(string divisionId, bool? forc
parameters.Add("force", UriHelper.ParameterToString(force.Value));
}

var uri = UriHelper.GetUri($"api/v2/authorization/divisions/{divisionId}", parameters);
var uri = UriHelper.GetUri($"api/v2/authorization/divisions/{Uri.EscapeDataString(divisionId)}", parameters);

var client = _httpClientFactory.CreateClient(PureCloudConstants.PureCloudClientName);

var response = await client.DeleteAsync(uri, cancellationToken);

response.EnsureSuccessStatusCode();
Comment thread
MikeAlhayek marked this conversation as resolved.
}

/// <inheritdoc />
public async Task<AuthzDivisionEntityListing> GetAuthorizationDivisionsDeletedAsync(int? pageNumber = null, int? pageSize = null, CancellationToken cancellationToken = default)
{
var parameters = new NameValueCollection();

if (pageNumber.HasValue)
{
parameters.Add("pageNumber", UriHelper.ParameterToString(pageNumber.Value));
}

if (pageSize.HasValue)
{
parameters.Add("pageSize", UriHelper.ParameterToString(pageSize.Value));
}

var uri = UriHelper.GetUri("api/v2/authorization/divisions/deleted", parameters);

var client = _httpClientFactory.CreateClient(PureCloudConstants.PureCloudClientName);

var response = await _httpClient.DeleteAsync(uri, cancellationToken);
var response = await client.GetAsync(uri, cancellationToken);

response.EnsureSuccessStatusCode();

return await response.Content.ReadFromJsonAsync<AuthzDivisionEntityListing>(_options.JsonSerializerOptions, cancellationToken);
}

/// <inheritdoc />
public async Task<AuthzDivision> GetAuthorizationDivisionsHomeAsync(CancellationToken cancellationToken = default)
{
var client = _httpClientFactory.CreateClient(PureCloudConstants.PureCloudClientName);

var response = await client.GetAsync("api/v2/authorization/divisions/home", cancellationToken);

response.EnsureSuccessStatusCode();

return await response.Content.ReadFromJsonAsync<AuthzDivision>(_options.JsonSerializerOptions, cancellationToken);
}

/// <inheritdoc />
public async Task<int?> GetAuthorizationDivisionsLimitAsync(CancellationToken cancellationToken = default)
Comment thread
MikeAlhayek marked this conversation as resolved.
{
var client = _httpClientFactory.CreateClient(PureCloudConstants.PureCloudClientName);

var response = await client.GetAsync("api/v2/authorization/divisions/limit", cancellationToken);

response.EnsureSuccessStatusCode();

return await response.Content.ReadFromJsonAsync<int?>(_options.JsonSerializerOptions, cancellationToken);
}

/// <inheritdoc />
public async Task CreateAuthorizationDivisionObjectsAsync(string divisionId, string objectType, IEnumerable<string> body, CancellationToken cancellationToken = default)
Comment thread
MikeAlhayek marked this conversation as resolved.
{
Comment thread
MikeAlhayek marked this conversation as resolved.
ArgumentException.ThrowIfNullOrEmpty(divisionId);
Comment thread
MikeAlhayek marked this conversation as resolved.
ArgumentException.ThrowIfNullOrEmpty(objectType);
ArgumentNullException.ThrowIfNull(body);

var uri = $"api/v2/authorization/divisions/{Uri.EscapeDataString(divisionId)}/objects/{Uri.EscapeDataString(objectType)}";

var client = _httpClientFactory.CreateClient(PureCloudConstants.PureCloudClientName);

var response = await client.PostAsJsonAsync(uri, body, _options.JsonSerializerOptions, cancellationToken);

response.EnsureSuccessStatusCode();
}

/// <inheritdoc />
public async Task<AuthzDivisionCursorListing> GetAuthorizationDivisionsQueryAsync(string before = null, string after = null, string pageSize = null, IEnumerable<string> ids = null, string name = null, CancellationToken cancellationToken = default)
{
var parameters = new NameValueCollection();

if (!string.IsNullOrEmpty(before))
{
parameters.Add("before", UriHelper.ParameterToString(before));
}

if (!string.IsNullOrEmpty(after))
{
parameters.Add("after", UriHelper.ParameterToString(after));
}

if (!string.IsNullOrEmpty(pageSize))
{
parameters.Add("pageSize", UriHelper.ParameterToString(pageSize));
}

if (ids != null)
{
foreach (var id in ids)
{
parameters.Add("id", UriHelper.ParameterToString(id));
}
}

if (!string.IsNullOrEmpty(name))
{
parameters.Add("name", UriHelper.ParameterToString(name));
}

var uri = UriHelper.GetUri("api/v2/authorization/divisions/query", parameters);

var client = _httpClientFactory.CreateClient(PureCloudConstants.PureCloudClientName);

var response = await client.GetAsync(uri, cancellationToken);

response.EnsureSuccessStatusCode();

return await response.Content.ReadFromJsonAsync<AuthzDivisionCursorListing>(_options.JsonSerializerOptions, cancellationToken);
}

/// <inheritdoc />
public async Task<AuthzDivision> PostAuthorizationDivisionRestoreAsync(string divisionId, AuthzDivision body, CancellationToken cancellationToken = default)
{
ArgumentException.ThrowIfNullOrEmpty(divisionId);

ArgumentNullException.ThrowIfNull(body);

var uri = $"api/v2/authorization/divisions/{Uri.EscapeDataString(divisionId)}/restore";

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't need uri variable here. Apply the same feedback everywhere

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed unnecessary uri variables throughout ObjectsApi - now passing URI strings directly to HttpClient methods instead of storing in variables first. Applied to CreateAuthorizationDivisionAsync, UpdateAuthorizationDivisionAsync, CreateAuthorizationDivisionObjectsAsync, and PostAuthorizationDivisionRestoreAsync methods. Commit: ac43793


var client = _httpClientFactory.CreateClient(PureCloudConstants.PureCloudClientName);

var response = await client.PostAsJsonAsync(uri, body, _options.JsonSerializerOptions, cancellationToken);

response.EnsureSuccessStatusCode();

return await response.Content.ReadFromJsonAsync<AuthzDivision>(_options.JsonSerializerOptions, cancellationToken);
}
Comment thread
MikeAlhayek marked this conversation as resolved.
}
}
34 changes: 32 additions & 2 deletions src/PureCloud.Client/Contracts/IObjectsApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public interface IObjectsApi
/// <summary>
/// Get a list of authorization divisions.
/// </summary>
Task<AuthzDivisionEntityListing> GetAuthorizationDivisionsAsync(int? pageSize = null, int? pageNumber = null, string sortBy = null, IEnumerable<string> expand = null, string nextPage = null, string previousPage = null, bool? objectCount = null, IEnumerable<string> id = null, string name = null, CancellationToken cancellationToken = default);
Task<AuthzDivisionEntityListing> GetAuthorizationDivisionsAsync(int? pageSize = null, int? pageNumber = null, string sortBy = null, IEnumerable<string> expands = null, string nextPage = null, string previousPage = null, bool? objectCount = null, IEnumerable<string> ids = null, string name = null, CancellationToken cancellationToken = default);

/// <summary>
/// Create a new authorization division.
Expand All @@ -28,4 +28,34 @@ public interface IObjectsApi
/// Delete an authorization division.
/// </summary>
Task DeleteAuthorizationDivisionAsync(string divisionId, bool? force = null, CancellationToken cancellationToken = default);
}

/// <summary>
/// Get a list of soft deleted divisions for the org.
Comment thread
MikeAlhayek marked this conversation as resolved.
/// </summary>
Task<AuthzDivisionEntityListing> GetAuthorizationDivisionsDeletedAsync(int? pageNumber = null, int? pageSize = null, CancellationToken cancellationToken = default);

/// <summary>
/// Retrieve the home division for the organization.
/// </summary>
Task<AuthzDivision> GetAuthorizationDivisionsHomeAsync(CancellationToken cancellationToken = default);

/// <summary>
/// Returns the maximum allowed number of divisions.
/// </summary>
Task<int?> GetAuthorizationDivisionsLimitAsync(CancellationToken cancellationToken = default);

/// <summary>
/// Assign a list of objects to a division.
/// </summary>
Task CreateAuthorizationDivisionObjectsAsync(string divisionId, string objectType, IEnumerable<string> body, CancellationToken cancellationToken = default);

/// <summary>
/// Retrieve a list of all divisions defined for the organization with cursor-based pagination.
/// </summary>
Task<AuthzDivisionCursorListing> GetAuthorizationDivisionsQueryAsync(string before = null, string after = null, string pageSize = null, IEnumerable<string> ids = null, string name = null, CancellationToken cancellationToken = default);

/// <summary>
/// Recreate a previously deleted division.
/// </summary>
Task<AuthzDivision> PostAuthorizationDivisionRestoreAsync(string divisionId, AuthzDivision body, CancellationToken cancellationToken = default);
Comment thread
MikeAlhayek marked this conversation as resolved.
}
4 changes: 1 addition & 3 deletions src/PureCloud.Client/PureCloud.Client.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5109,9 +5109,7 @@
<Compile Include="Models\SipDownloadResponse.cs" />
<Compile Include="Models\SignedUrlResponse.cs" />
<Compile Include="Address.cs" />
<Compile Include="obj\Debug\net8.0\.NETCoreApp,Version=v8.0.AssemblyAttributes.cs" />
<Compile Include="obj\Debug\net8.0\PureCloud.Client.AssemblyInfo.cs" />
<Compile Include="obj\Debug\net8.0\PureCloud.Client.GlobalUsings.g.cs" />

<Compile Include="PureCloudRegionHosts.cs" />
<Compile Include="PureCloudConstants.cs" />
<Compile Include="Json\PureCloudJsonSerializerOptions.cs" />
Expand Down
Loading