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
10 changes: 5 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
ARG CONFIGURATION="Release"
ARG NUGET_PACKAGE_VERSION="1.0.0"
ARG COMPANIES_HOUSE_API_KEY
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS restore
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS restore

ARG CONFIGURATION

Expand All @@ -21,7 +21,7 @@ COPY ./tests/CompaniesHouse.Tests/*.csproj ./tests/CompaniesHouse.Tests/
COPY ./samples/SampleProject/*.csproj ./samples/SampleProject/
RUN dotnet restore

FROM restore as build
FROM restore AS build
ARG CONFIGURATION
ARG NUGET_PACKAGE_VERSION

Expand All @@ -30,11 +30,11 @@ COPY ./tests/ ./tests/
COPY ./samples/ ./samples/
RUN dotnet build --configuration $CONFIGURATION --no-restore

FROM build as test
FROM build AS test
ARG COMPANIES_HOUSE_API_KEY
RUN dotnet test --logger trx --configuration $CONFIGURATION --no-build

FROM build as pack
FROM build AS pack
RUN mkdir -p artifacts
RUN dotnet pack --configuration Release -p:Version=${NUGET_PACKAGE_VERSION} --no-build --output ./artifacts

Expand All @@ -44,4 +44,4 @@ COPY --from=pack /artifacts/*.snupkg /artifacts/
COPY --from=test /tests/CompaniesHouse.Extensions.Microsoft.DependencyInjection.Tests/TestResults/*.trx /TestResults/CompaniesHouse.Extensions.Microsoft.DependencyInjection.Tests/
COPY --from=test /tests/CompaniesHouse.IntegrationTests/TestResults/*.trx /TestResults/CompaniesHouse.IntegrationTests/
COPY --from=test /tests/CompaniesHouse.ScenarioTests/TestResults/*.trx /TestResults/CompaniesHouse.ScenarioTests/
COPY --from=test /tests/CompaniesHouse.Tests/TestResults/*.trx /TestResults/CompaniesHouse.Tests/
COPY --from=test /tests/CompaniesHouse.Tests/TestResults/*.trx /TestResults/CompaniesHouse.Tests/
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,9 @@ public static class CompaniesHouseClientServiceCollectionExtensions
/// <returns>Service collection</returns>
public static IServiceCollection AddCompaniesHouseClient(this IServiceCollection services, string apiKey)
{
return services.AddCompaniesHouseClient(opt =>
{
opt.ApiKey = apiKey;
});
return services.AddCompaniesHouseClient(opt => { opt.ApiKey = apiKey; });
}

/// <summary>
/// Registers the companies house client
/// </summary>
Expand Down Expand Up @@ -69,7 +66,7 @@ public static IServiceCollection AddCompaniesHouseClient(this IServiceCollection
configure.Invoke(provider, options);
return options;
});

services.TryAddTransient<IApiKeyProvider>(provider =>
{
var options = provider.GetRequiredService<CompaniesHouseClientOptions>();
Expand All @@ -89,6 +86,8 @@ public static IServiceCollection AddCompaniesHouseClient(this IServiceCollection

services.TryAddTransient<ICompaniesHouseSearchCompanyClient>(provider =>
provider.GetService<ICompaniesHouseClient>());
services.TryAddTransient<ICompaniesHouseSearchCompanyAdvancedClient>(provider =>
provider.GetService<ICompaniesHouseClient>());
services.TryAddTransient<ICompaniesHouseSearchOfficerClient>(provider =>
provider.GetService<ICompaniesHouseClient>());
services.TryAddTransient<ICompaniesHouseSearchDisqualifiedOfficerClient>(provider =>
Expand All @@ -103,8 +102,8 @@ public static IServiceCollection AddCompaniesHouseClient(this IServiceCollection
provider.GetService<ICompaniesHouseClient>());
services.TryAddTransient<ICompaniesHouseCompanyInsolvencyInformationClient>(provider =>
provider.GetService<ICompaniesHouseClient>());
services.TryAddTransient<ICompaniesHouseAppointmentsClient>(
provider => provider.GetService<ICompaniesHouseClient>());
services.TryAddTransient<ICompaniesHouseAppointmentsClient>(provider =>
provider.GetService<ICompaniesHouseClient>());
services.TryAddTransient<ICompaniesHousePersonsWithSignificantControlClient>(provider =>
provider.GetService<ICompaniesHouseClient>());
services.TryAddTransient<ICompaniesHouseChargesClient>(provider =>
Expand Down
10 changes: 6 additions & 4 deletions src/CompaniesHouse/CompaniesHouseClient.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Net.Http;
using CompaniesHouse.Request;
using CompaniesHouse.Response.Appointments;
using CompaniesHouse.Response.Charges;
Expand Down Expand Up @@ -58,6 +55,11 @@ public CompaniesHouseClient(ICompaniesHouseSettings settings)
{
return _companiesHouseSearchClient.SearchAsync<SearchCompanyRequest, CompanySearch>(request, cancellationToken);
}

public Task<CompaniesHouseClientResponse<CompanySearch>> SearchCompanyAdvancedAsync(AdvancedSearchCompanyRequest request, CancellationToken cancellationToken = default(CancellationToken))
{
return _companiesHouseSearchClient.SearchAsync<AdvancedSearchCompanyRequest, CompanySearch>(request, cancellationToken);
}

public Task<CompaniesHouseClientResponse<OfficerSearch>> SearchOfficerAsync(SearchOfficerRequest request, CancellationToken cancellationToken = default(CancellationToken))
{
Expand Down
9 changes: 7 additions & 2 deletions src/CompaniesHouse/HttpContentExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,25 @@
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

namespace CompaniesHouse
{
public static class HttpContentExtensions
{
public static readonly JsonSerializer Serializer = new()
{
Converters = { new StringEnumConverter() }
};

public static async Task<T> ReadAsJsonAsync<T>(this HttpContent content)
{
using var s = await content.ReadAsStreamAsync()
.ConfigureAwait(false);
using var sr = new StreamReader(s);
using var reader = new JsonTextReader(sr);
var serializer = new JsonSerializer();

return serializer.Deserialize<T>(reader);
return Serializer.Deserialize<T>(reader);
}
}
}
1 change: 1 addition & 0 deletions src/CompaniesHouse/ICompaniesHouseClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
{
public interface ICompaniesHouseClient :
ICompaniesHouseSearchCompanyClient,
ICompaniesHouseSearchCompanyAdvancedClient,
ICompaniesHouseSearchOfficerClient,
ICompaniesHouseSearchDisqualifiedOfficerClient,
ICompaniesHouseSearchAllClient,
Expand Down
10 changes: 10 additions & 0 deletions src/CompaniesHouse/ICompaniesHouseSearchCompanyAdvancedClient.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using CompaniesHouse.Request;
using CompaniesHouse.Response.Search.CompanySearch;

namespace CompaniesHouse;

public interface ICompaniesHouseSearchCompanyAdvancedClient
{
Task<CompaniesHouseClientResponse<CompanySearch>> SearchCompanyAdvancedAsync(
AdvancedSearchCompanyRequest request, CancellationToken cancellationToken = default(CancellationToken));
}
20 changes: 20 additions & 0 deletions src/CompaniesHouse/Request/AdvancedSearchCompanyRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#nullable enable
using CompaniesHouse.Response;
using CompaniesHouse.Response.Search.CompanySearch;

namespace CompaniesHouse.Request;

public class AdvancedSearchCompanyRequest : SearchRequest<CompanySearch>
{
public string? CompanyNameIncludes { get; set; }
public string? CompanyNameExcludes { get; set; }
public IReadOnlyCollection<CompanyStatus> CompanyStatus { get; set; } = [];
public IReadOnlyCollection<CompanySubType> CompanySubtype { get; set; } = [];
public IReadOnlyCollection<CompanyType> CompanyType { get; set; } = [];
public DateTime? DissolvedFrom { get; set; }
public DateTime? DissolvedTo { get; set; }
public DateTime? IncorporatedFrom { get; set; }
public DateTime? IncorporatedTo { get; set; }
public string? Location { get; set; }
public IReadOnlyCollection<string> SicCodes { get; set; } = [];
}
6 changes: 6 additions & 0 deletions src/CompaniesHouse/Request/IQuerySearchRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace CompaniesHouse.Request;

public interface IQuerySearchRequest : ISearchRequest
{
string Query { get; }
}
2 changes: 0 additions & 2 deletions src/CompaniesHouse/Request/ISearchRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

public interface ISearchRequest
{
string Query { get; }

int? ItemsPerPage { get; }

int? StartIndex { get; }
Expand Down
2 changes: 1 addition & 1 deletion src/CompaniesHouse/Request/SearchAllRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

namespace CompaniesHouse.Request;

public class SearchAllRequest : SearchRequest<AllSearch>
public class SearchAllRequest : QuerySearchRequest<AllSearch>
{
}
7 changes: 4 additions & 3 deletions src/CompaniesHouse/Request/SearchCompanyRequest.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
using CompaniesHouse.Response.Search.CompanySearch;
#nullable enable
using CompaniesHouse.Response.Search.CompanySearch;

namespace CompaniesHouse.Request;

public class SearchCompanyRequest : SearchRequest<CompanySearch>
public class SearchCompanyRequest : QuerySearchRequest<CompanySearch>
{
public string Restrictions { get; set; }
public string? Restrictions { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

namespace CompaniesHouse.Request;

public class SearchDisqualifiedOfficerRequest : SearchRequest<DisqualifiedOfficerSearch>
public class SearchDisqualifiedOfficerRequest : QuerySearchRequest<DisqualifiedOfficerSearch>
{
}
2 changes: 1 addition & 1 deletion src/CompaniesHouse/Request/SearchOfficerRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

namespace CompaniesHouse.Request;

public class SearchOfficerRequest : SearchRequest<OfficerSearch>
public class SearchOfficerRequest : QuerySearchRequest<OfficerSearch>
{
}
5 changes: 4 additions & 1 deletion src/CompaniesHouse/Request/SearchRequest.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
namespace CompaniesHouse.Request
{
public abstract class SearchRequest<TReturn> : ISearchRequest
public abstract class QuerySearchRequest<TReturn> : SearchRequest<TReturn>, IQuerySearchRequest
{
public string Query { get; set; } = "";
}

public abstract class SearchRequest<TReturn> : ISearchRequest
{
public int? ItemsPerPage { get; set; }

public int? StartIndex { get; set; }
Expand Down
14 changes: 14 additions & 0 deletions src/CompaniesHouse/Response/CompanySubType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.Runtime.Serialization;

namespace CompaniesHouse.Response;

public enum CompanySubType
{
[EnumMember(Value = "")] None = 0,

[EnumMember(Value = "community-interest-company")]
CommunityInterestCompany,

[EnumMember(Value = "private-fund-limited-partnership")]
PrivateFundLimitedPartnership,
}
6 changes: 5 additions & 1 deletion src/CompaniesHouse/Response/Search/CompanySearch/Company.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@ public class Company : SearchItem
[JsonProperty(PropertyName = "company_type")]
[JsonConverter(typeof(StringEnumConverter))]
public CompanyType CompanyType { get; set; }


[JsonProperty(PropertyName = "company_subtype")]
[JsonConverter(typeof(StringEnumConverter))]
public CompanySubType CompanySubType { get; set; }

[JsonProperty(PropertyName = "date_of_cessation")]
[JsonConverter(typeof(OptionalDateJsonConverter))]
public DateTime? DateOfCessation { get; set; }
Expand Down
23 changes: 17 additions & 6 deletions src/CompaniesHouse/SearchUriBuilderFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,26 @@ public ISearchUriBuilder<TSearch> Create<TSearch, TReturn>() where TSearch : Sea
{
return (ISearchUriBuilder<TSearch>)new SearchCompanyUriBuilder("search/companies");
}
else if (type == typeof(SearchOfficerRequest))

if (type == typeof(SearchOfficerRequest))
{
return (ISearchUriBuilder<TSearch>)new QuerySearchUriBuilder<SearchOfficerRequest>("search/officers");
}

if (type == typeof(SearchDisqualifiedOfficerRequest))
{
return new SearchUriBuilder<TSearch>("search/officers");
}else if (type == typeof(SearchDisqualifiedOfficerRequest))
return (ISearchUriBuilder<TSearch>)new QuerySearchUriBuilder<SearchDisqualifiedOfficerRequest>(
"search/disqualified-officers");
}

if (type == typeof(SearchAllRequest))
{
return new SearchUriBuilder<TSearch>("search/disqualified-officers");
} else if (type == typeof(SearchAllRequest))
return (ISearchUriBuilder<TSearch>)new QuerySearchUriBuilder<SearchAllRequest>("search");
}

if (type == typeof(AdvancedSearchCompanyRequest))
{
return new SearchUriBuilder<TSearch>("search");
return (ISearchUriBuilder<TSearch>)new AdvancedSearchCompanyUriBuilder("advanced-search/companies");
}

throw new InvalidOperationException();
Expand Down
30 changes: 30 additions & 0 deletions src/CompaniesHouse/UriBuilders/AdvancedSearchCompanyUriBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using System.Text;
using CompaniesHouse.Request;

namespace CompaniesHouse.UriBuilders;

public class AdvancedSearchCompanyUriBuilder : SearchUriBuilder<AdvancedSearchCompanyRequest>
{
public AdvancedSearchCompanyUriBuilder(string path) : base(path)
{
}

protected override string BuildQuery(AdvancedSearchCompanyRequest request)
{
var queryBuilder = new StringBuilder(base.BuildQuery(request));

AppendParameterIfValid(queryBuilder, "company_name_includes", request.CompanyNameIncludes, value => !string.IsNullOrWhiteSpace(value));
AppendParameterIfValid(queryBuilder, "company_name_excludes", request.CompanyNameExcludes, value => !string.IsNullOrWhiteSpace(value));
AppendParameterIfValid(queryBuilder, "company_status", request.CompanyStatus);
AppendParameterIfValid(queryBuilder, "company_subtype", request.CompanySubtype);
AppendParameterIfValid(queryBuilder, "company_type", request.CompanyType);
AppendParameterIfValid(queryBuilder, "dissolved_from", request.DissolvedFrom, value => value.HasValue);
AppendParameterIfValid(queryBuilder, "dissolved_to", request.DissolvedTo, value =>value.HasValue);
AppendParameterIfValid(queryBuilder, "incorporated_from", request.IncorporatedFrom, value =>value.HasValue);
AppendParameterIfValid(queryBuilder, "incorporated_to", request.IncorporatedTo, value => value.HasValue);
AppendParameterIfValid(queryBuilder, "location", request.Location, value => !string.IsNullOrWhiteSpace(value));
AppendParameterIfValid(queryBuilder, "sic_codes", request.SicCodes);

return queryBuilder.ToString();
}
}
2 changes: 1 addition & 1 deletion src/CompaniesHouse/UriBuilders/SearchCompanyUriBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace CompaniesHouse.UriBuilders;

public class SearchCompanyUriBuilder : SearchUriBuilder<SearchCompanyRequest>
public class SearchCompanyUriBuilder : QuerySearchUriBuilder<SearchCompanyRequest>
{
public SearchCompanyUriBuilder(string path) : base(path)
{
Expand Down
Loading
Loading