Skip to content

Commit 332b7a4

Browse files
committed
Adding advanced search. Fixes issue #216.
1 parent e9985c9 commit 332b7a4

File tree

38 files changed

+819
-38
lines changed

38 files changed

+819
-38
lines changed

src/CompaniesHouse.Extensions.Microsoft.DependencyInjection/CompaniesHouseClientServiceCollectionExtensions.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,9 @@ public static class CompaniesHouseClientServiceCollectionExtensions
1919
/// <returns>Service collection</returns>
2020
public static IServiceCollection AddCompaniesHouseClient(this IServiceCollection services, string apiKey)
2121
{
22-
return services.AddCompaniesHouseClient(opt =>
23-
{
24-
opt.ApiKey = apiKey;
25-
});
22+
return services.AddCompaniesHouseClient(opt => { opt.ApiKey = apiKey; });
2623
}
27-
24+
2825
/// <summary>
2926
/// Registers the companies house client
3027
/// </summary>
@@ -69,7 +66,7 @@ public static IServiceCollection AddCompaniesHouseClient(this IServiceCollection
6966
configure.Invoke(provider, options);
7067
return options;
7168
});
72-
69+
7370
services.TryAddTransient<IApiKeyProvider>(provider =>
7471
{
7572
var options = provider.GetRequiredService<CompaniesHouseClientOptions>();
@@ -89,6 +86,8 @@ public static IServiceCollection AddCompaniesHouseClient(this IServiceCollection
8986

9087
services.TryAddTransient<ICompaniesHouseSearchCompanyClient>(provider =>
9188
provider.GetService<ICompaniesHouseClient>());
89+
services.TryAddTransient<ICompaniesHouseSearchCompanyAdvancedClient>(provider =>
90+
provider.GetService<ICompaniesHouseClient>());
9291
services.TryAddTransient<ICompaniesHouseSearchOfficerClient>(provider =>
9392
provider.GetService<ICompaniesHouseClient>());
9493
services.TryAddTransient<ICompaniesHouseSearchDisqualifiedOfficerClient>(provider =>
@@ -103,8 +102,8 @@ public static IServiceCollection AddCompaniesHouseClient(this IServiceCollection
103102
provider.GetService<ICompaniesHouseClient>());
104103
services.TryAddTransient<ICompaniesHouseCompanyInsolvencyInformationClient>(provider =>
105104
provider.GetService<ICompaniesHouseClient>());
106-
services.TryAddTransient<ICompaniesHouseAppointmentsClient>(
107-
provider => provider.GetService<ICompaniesHouseClient>());
105+
services.TryAddTransient<ICompaniesHouseAppointmentsClient>(provider =>
106+
provider.GetService<ICompaniesHouseClient>());
108107
services.TryAddTransient<ICompaniesHousePersonsWithSignificantControlClient>(provider =>
109108
provider.GetService<ICompaniesHouseClient>());
110109
services.TryAddTransient<ICompaniesHouseChargesClient>(provider =>

src/CompaniesHouse/CompaniesHouseClient.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
using System;
2-
using System.Net.Http;
3-
using System.Threading;
4-
using System.Threading.Tasks;
1+
using System.Net.Http;
52
using CompaniesHouse.Request;
63
using CompaniesHouse.Response.Appointments;
74
using CompaniesHouse.Response.Charges;
@@ -58,6 +55,11 @@ public CompaniesHouseClient(ICompaniesHouseSettings settings)
5855
{
5956
return _companiesHouseSearchClient.SearchAsync<SearchCompanyRequest, CompanySearch>(request, cancellationToken);
6057
}
58+
59+
public Task<CompaniesHouseClientResponse<CompanySearch>> SearchCompanyAdvancedAsync(AdvancedSearchCompanyRequest request, CancellationToken cancellationToken = default(CancellationToken))
60+
{
61+
return _companiesHouseSearchClient.SearchAsync<AdvancedSearchCompanyRequest, CompanySearch>(request, cancellationToken);
62+
}
6163

6264
public Task<CompaniesHouseClientResponse<OfficerSearch>> SearchOfficerAsync(SearchOfficerRequest request, CancellationToken cancellationToken = default(CancellationToken))
6365
{

src/CompaniesHouse/HttpContentExtensions.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,25 @@
22
using System.Net.Http;
33
using System.Threading.Tasks;
44
using Newtonsoft.Json;
5+
using Newtonsoft.Json.Converters;
56

67
namespace CompaniesHouse
78
{
89
public static class HttpContentExtensions
910
{
11+
public static readonly JsonSerializer Serializer = new()
12+
{
13+
Converters = { new StringEnumConverter() }
14+
};
15+
1016
public static async Task<T> ReadAsJsonAsync<T>(this HttpContent content)
1117
{
1218
using var s = await content.ReadAsStreamAsync()
1319
.ConfigureAwait(false);
1420
using var sr = new StreamReader(s);
1521
using var reader = new JsonTextReader(sr);
16-
var serializer = new JsonSerializer();
1722

18-
return serializer.Deserialize<T>(reader);
23+
return Serializer.Deserialize<T>(reader);
1924
}
2025
}
2126
}

src/CompaniesHouse/ICompaniesHouseClient.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{
33
public interface ICompaniesHouseClient :
44
ICompaniesHouseSearchCompanyClient,
5+
ICompaniesHouseSearchCompanyAdvancedClient,
56
ICompaniesHouseSearchOfficerClient,
67
ICompaniesHouseSearchDisqualifiedOfficerClient,
78
ICompaniesHouseSearchAllClient,
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using CompaniesHouse.Request;
2+
using CompaniesHouse.Response.Search.CompanySearch;
3+
4+
namespace CompaniesHouse;
5+
6+
public interface ICompaniesHouseSearchCompanyAdvancedClient
7+
{
8+
Task<CompaniesHouseClientResponse<CompanySearch>> SearchCompanyAdvancedAsync(
9+
AdvancedSearchCompanyRequest request, CancellationToken cancellationToken = default(CancellationToken));
10+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#nullable enable
2+
using CompaniesHouse.Response;
3+
using CompaniesHouse.Response.Search.CompanySearch;
4+
5+
namespace CompaniesHouse.Request;
6+
7+
public class AdvancedSearchCompanyRequest : SearchRequest<CompanySearch>
8+
{
9+
public string? CompanyNameIncludes { get; set; }
10+
public string? CompanyNameExcludes { get; set; }
11+
public IReadOnlyCollection<CompanyStatus> CompanyStatus { get; set; } = [];
12+
public IReadOnlyCollection<CompanySubType> CompanySubtype { get; set; } = [];
13+
public IReadOnlyCollection<CompanyType> CompanyType { get; set; } = [];
14+
public DateTime? DissolvedFrom { get; set; }
15+
public DateTime? DissolvedTo { get; set; }
16+
public DateTime? IncorporatedFrom { get; set; }
17+
public DateTime? IncorporatedTo { get; set; }
18+
public string? Location { get; set; }
19+
public IReadOnlyCollection<string> SicCodes { get; set; } = [];
20+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace CompaniesHouse.Request;
2+
3+
public interface IQuerySearchRequest : ISearchRequest
4+
{
5+
string Query { get; }
6+
}

src/CompaniesHouse/Request/ISearchRequest.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
public interface ISearchRequest
44
{
5-
string Query { get; }
6-
75
int? ItemsPerPage { get; }
86

97
int? StartIndex { get; }

src/CompaniesHouse/Request/SearchAllRequest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22

33
namespace CompaniesHouse.Request;
44

5-
public class SearchAllRequest : SearchRequest<AllSearch>
5+
public class SearchAllRequest : QuerySearchRequest<AllSearch>
66
{
77
}
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
using CompaniesHouse.Response.Search.CompanySearch;
1+
#nullable enable
2+
using CompaniesHouse.Response.Search.CompanySearch;
23

34
namespace CompaniesHouse.Request;
45

5-
public class SearchCompanyRequest : SearchRequest<CompanySearch>
6+
public class SearchCompanyRequest : QuerySearchRequest<CompanySearch>
67
{
7-
public string Restrictions { get; set; }
8+
public string? Restrictions { get; set; }
89
}

0 commit comments

Comments
 (0)