Skip to content

Commit

Permalink
Add support for more bulk organization operations (#542)
Browse files Browse the repository at this point in the history
* Add support for creating multiple organizations

* Add support for deleting multiple organizations

* Add unit tests to cover new bulk endpoints

* org test clean up

Co-authored-by: Alastair Pitts <alastair.pitts@octopus.com>

* updated usings

Co-authored-by: Alastair Pitts <alastair.pitts@octopus.com>
  • Loading branch information
mozts2005 and APErebus committed Oct 23, 2021
1 parent 3a6f51f commit 7b9aa5a
Show file tree
Hide file tree
Showing 2 changed files with 325 additions and 6 deletions.
39 changes: 39 additions & 0 deletions src/ZendeskApi_v2/Requests/Organizations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using ZendeskApi_v2.Extensions;
using ZendeskApi_v2.Models.Organizations;
using ZendeskApi_v2.Models.Shared;
Expand Down Expand Up @@ -33,11 +34,14 @@ public interface IOrganizations : ICore
/// <returns></returns>
GroupOrganizationResponse GetMultipleOrganizationsByExternalIds(IEnumerable<string> externalIds);
IndividualOrganizationResponse CreateOrganization(Organization organization);
JobStatusResponse CreateMultipleOrganizations(IEnumerable<Organization> organizations);
IndividualOrganizationResponse CreateOrUpdateOrganization(Organization organization);

IndividualOrganizationResponse UpdateOrganization(Organization organization);
JobStatusResponse UpdateMultipleOrganizations(IEnumerable<Organization> organizations);
bool DeleteOrganization(long id);
JobStatusResponse DeleteMultipleOrganizations(IEnumerable<long> ids);
JobStatusResponse DeleteMultipleOrganizationsByExternalIds(IEnumerable<string> externalIds);

GroupOrganizationMembershipResponse GetOrganizationMemberships(int? perPage = null, int? page = null);
GroupOrganizationMembershipResponse GetOrganizationMembershipsByUserId(long userId, int? perPage = null, int? page = null);
Expand Down Expand Up @@ -77,10 +81,13 @@ public interface IOrganizations : ICore
/// <returns></returns>
Task<GroupOrganizationResponse> GetMultipleOrganizationsByExternalIdsAsync(IEnumerable<string> externalIds);
Task<IndividualOrganizationResponse> CreateOrganizationAsync(Organization organization);
Task<JobStatusResponse> CreateMultipleOrganizationsAsync(IEnumerable<Organization> organizations);
Task<IndividualOrganizationResponse> CreateOrUpdateOrganizationAsync(Organization organization);
Task<IndividualOrganizationResponse> UpdateOrganizationAsync(Organization organization);
Task<JobStatusResponse> UpdateMultipleOrganizationsAsync(IEnumerable<Organization> organizations);
Task<bool> DeleteOrganizationAsync(long id);
Task<JobStatusResponse> DeleteMultipleOrganizationsAsync(IEnumerable<long> ids);
Task<JobStatusResponse> DeleteMultipleOrganizationsByExternalIdsAsync(IEnumerable<string> externalIds);

Task<GroupOrganizationMembershipResponse> GetOrganizationMembershipsAsync(int? perPage = null, int? page = null);
Task<GroupOrganizationMembershipResponse> GetOrganizationMembershipsByUserIdAsync(long userId, int? perPage = null, int? page = null);
Expand Down Expand Up @@ -151,6 +158,11 @@ public IndividualOrganizationResponse CreateOrganization(Organization organizati
return GenericPost<IndividualOrganizationResponse>("organizations.json", body);
}

public JobStatusResponse CreateMultipleOrganizations(IEnumerable<Organization> organizations)
{
return GenericPost<JobStatusResponse>("organizations/create_many.json", new { organizations });
}

public IndividualOrganizationResponse CreateOrUpdateOrganization(Organization organization)
{
var body = new { organization };
Expand All @@ -173,6 +185,17 @@ public bool DeleteOrganization(long id)
return GenericDelete($"organizations/{id}.json");
}

public JobStatusResponse DeleteMultipleOrganizations(IEnumerable<long> ids)
{
return GenericDelete<JobStatusResponse>($"organizations/destroy_many.json?ids={string.Join(",", ids)}");
}

public JobStatusResponse DeleteMultipleOrganizationsByExternalIds(IEnumerable<string> externalIds)
{
var encodedIds = WebUtility.UrlEncode(string.Join(",", externalIds));
return GenericDelete<JobStatusResponse>($"organizations/destroy_many.json?external_ids={encodedIds}");
}

public GroupOrganizationMembershipResponse GetOrganizationMemberships(int? perPage = null, int? page = null)
{
return GenericPagedGet<GroupOrganizationMembershipResponse>("organization_memberships.json", perPage, page);
Expand Down Expand Up @@ -276,6 +299,11 @@ public async Task<IndividualOrganizationResponse> GetOrganizationAsync(long id)
return await GenericGetAsync<IndividualOrganizationResponse>($"organizations/{id}.json");
}

public async Task<JobStatusResponse> CreateMultipleOrganizationsAsync(IEnumerable<Organization> organizations)
{
return await GenericPostAsync<JobStatusResponse>("organizations/create_many.json", new { organizations });
}

public async Task<GroupOrganizationResponse> GetMultipleOrganizationsAsync(IEnumerable<long> ids)
{
return await GenericGetAsync<GroupOrganizationResponse>($"organizations/show_many.json?ids={ids.ToCsv()}");
Expand Down Expand Up @@ -311,6 +339,17 @@ public async Task<bool> DeleteOrganizationAsync(long id)
return await GenericDeleteAsync($"organizations/{id}.json");
}

public async Task<JobStatusResponse> DeleteMultipleOrganizationsAsync(IEnumerable<long> ids)
{
return await GenericDeleteAsync<JobStatusResponse>($"organizations/destroy_many.json?ids={string.Join(",", ids)}");
}

public async Task<JobStatusResponse> DeleteMultipleOrganizationsByExternalIdsAsync(IEnumerable<string> externalIds)
{
var encodedIds = WebUtility.UrlEncode(string.Join(",", externalIds));
return await GenericDeleteAsync<JobStatusResponse>($"organizations/destroy_many.json?external_ids={encodedIds}");
}

public async Task<GroupOrganizationMembershipResponse> GetOrganizationMembershipsAsync(int? perPage = null, int? page = null)
{
return await GenericPagedGetAsync<GroupOrganizationMembershipResponse>("organization_memberships.json", perPage, page);
Expand Down
Loading

0 comments on commit 7b9aa5a

Please sign in to comment.