diff --git a/.gitignore b/.gitignore index 39b6c75..de64444 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ client/dist .vs/ .user +.kiota.log # Build results [Dd]ebug/ diff --git a/server/3cx_Tapi.sln b/server/3cx_Tapi.sln index 6343ddc..6bd12f8 100644 --- a/server/3cx_Tapi.sln +++ b/server/3cx_Tapi.sln @@ -1,10 +1,17 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 18 -VisualStudioVersion = 18.5.11612.153 insiders +VisualStudioVersion = 18.5.11612.153 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CPATapi.Server", "src\CPATapi.Server\CPATapi.Server.csproj", "{7879A024-A074-FE67-0546-8668213BFA99}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CPATapi.Client", "src\CPATapi.Client\CPATapi.Client.csproj", "{C60C2505-6D82-4058-9392-FA3C8F57FF8A}" + ProjectSection(ProjectDependencies) = postProject + {7879A024-A074-FE67-0546-8668213BFA99} = {7879A024-A074-FE67-0546-8668213BFA99} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CPATapi.Client.Tests", "test\CPATapi.Client.Tests\CPATapi.Client.Tests.csproj", "{17F37791-4F68-46D5-8CF5-5F1736F6776E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +22,14 @@ Global {7879A024-A074-FE67-0546-8668213BFA99}.Debug|Any CPU.Build.0 = Debug|Any CPU {7879A024-A074-FE67-0546-8668213BFA99}.Release|Any CPU.ActiveCfg = Release|Any CPU {7879A024-A074-FE67-0546-8668213BFA99}.Release|Any CPU.Build.0 = Release|Any CPU + {C60C2505-6D82-4058-9392-FA3C8F57FF8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C60C2505-6D82-4058-9392-FA3C8F57FF8A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C60C2505-6D82-4058-9392-FA3C8F57FF8A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C60C2505-6D82-4058-9392-FA3C8F57FF8A}.Release|Any CPU.Build.0 = Release|Any CPU + {17F37791-4F68-46D5-8CF5-5F1736F6776E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {17F37791-4F68-46D5-8CF5-5F1736F6776E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {17F37791-4F68-46D5-8CF5-5F1736F6776E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {17F37791-4F68-46D5-8CF5-5F1736F6776E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/server/src/CPATapi.Client/Availability/AvailabilityRequestBuilder.cs b/server/src/CPATapi.Client/Availability/AvailabilityRequestBuilder.cs new file mode 100644 index 0000000..22f1a2b --- /dev/null +++ b/server/src/CPATapi.Client/Availability/AvailabilityRequestBuilder.cs @@ -0,0 +1,54 @@ +// +#pragma warning disable CS0618 +using CPATapi.Client.Availability.Item; +using CPATapi.Client.Availability.Users; +using Microsoft.Kiota.Abstractions.Extensions; +using Microsoft.Kiota.Abstractions; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using System; +namespace CPATapi.Client.Availability +{ + /// + /// Builds and executes requests for operations under \Availability + /// + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + public partial class AvailabilityRequestBuilder : BaseRequestBuilder + { + /// The users property + public global::CPATapi.Client.Availability.Users.UsersRequestBuilder Users + { + get => new global::CPATapi.Client.Availability.Users.UsersRequestBuilder(PathParameters, RequestAdapter); + } + /// Gets an item from the CPATapi.Client.Availability.item collection + /// Unique identifier of the item + /// A + public global::CPATapi.Client.Availability.Item.WithUserItemRequestBuilder this[string position] + { + get + { + var urlTplParams = new Dictionary(PathParameters); + urlTplParams.Add("user", position); + return new global::CPATapi.Client.Availability.Item.WithUserItemRequestBuilder(urlTplParams, RequestAdapter); + } + } + /// + /// Instantiates a new and sets the default values. + /// + /// Path parameters for the request + /// The request adapter to use to execute the requests. + public AvailabilityRequestBuilder(Dictionary pathParameters, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/Availability", pathParameters) + { + } + /// + /// Instantiates a new and sets the default values. + /// + /// The raw URL to use for the request builder. + /// The request adapter to use to execute the requests. + public AvailabilityRequestBuilder(string rawUrl, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/Availability", rawUrl) + { + } + } +} +#pragma warning restore CS0618 diff --git a/server/src/CPATapi.Client/Availability/Item/WithUserItemRequestBuilder.cs b/server/src/CPATapi.Client/Availability/Item/WithUserItemRequestBuilder.cs new file mode 100644 index 0000000..000d4b0 --- /dev/null +++ b/server/src/CPATapi.Client/Availability/Item/WithUserItemRequestBuilder.cs @@ -0,0 +1,86 @@ +// +#pragma warning disable CS0618 +using CPATapi.Client.Models; +using Microsoft.Kiota.Abstractions.Extensions; +using Microsoft.Kiota.Abstractions.Serialization; +using Microsoft.Kiota.Abstractions; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using System.Threading; +using System; +namespace CPATapi.Client.Availability.Item +{ + /// + /// Builds and executes requests for operations under \Availability\{user} + /// + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + public partial class WithUserItemRequestBuilder : BaseRequestBuilder + { + /// + /// Instantiates a new and sets the default values. + /// + /// Path parameters for the request + /// The request adapter to use to execute the requests. + public WithUserItemRequestBuilder(Dictionary pathParameters, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/Availability/{user}", pathParameters) + { + } + /// + /// Instantiates a new and sets the default values. + /// + /// The raw URL to use for the request builder. + /// The request adapter to use to execute the requests. + public WithUserItemRequestBuilder(string rawUrl, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/Availability/{user}", rawUrl) + { + } + /// A + /// Cancellation token to use when cancelling requests + /// Configuration for the request such as headers, query parameters, and middleware options. +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public async Task GetAsync(Action>? requestConfiguration = default, CancellationToken cancellationToken = default) + { +#nullable restore +#else + public async Task GetAsync(Action> requestConfiguration = default, CancellationToken cancellationToken = default) + { +#endif + var requestInfo = ToGetRequestInformation(requestConfiguration); + return await RequestAdapter.SendAsync(requestInfo, global::CPATapi.Client.Models.Availability.CreateFromDiscriminatorValue, default, cancellationToken).ConfigureAwait(false); + } + /// A + /// Configuration for the request such as headers, query parameters, and middleware options. +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public RequestInformation ToGetRequestInformation(Action>? requestConfiguration = default) + { +#nullable restore +#else + public RequestInformation ToGetRequestInformation(Action> requestConfiguration = default) + { +#endif + var requestInfo = new RequestInformation(Method.GET, UrlTemplate, PathParameters); + requestInfo.Configure(requestConfiguration); + requestInfo.Headers.TryAdd("Accept", "application/json, text/plain;q=0.9"); + return requestInfo; + } + /// + /// Returns a request builder with the provided arbitrary URL. Using this method means any other path or query parameters are ignored. + /// + /// A + /// The raw URL to use for the request builder. + public global::CPATapi.Client.Availability.Item.WithUserItemRequestBuilder WithUrl(string rawUrl) + { + return new global::CPATapi.Client.Availability.Item.WithUserItemRequestBuilder(rawUrl, RequestAdapter); + } + /// + /// Configuration for the request such as headers, query parameters, and middleware options. + /// + [Obsolete("This class is deprecated. Please use the generic RequestConfiguration class generated by the generator.")] + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + public partial class WithUserItemRequestBuilderGetRequestConfiguration : RequestConfiguration + { + } + } +} +#pragma warning restore CS0618 diff --git a/server/src/CPATapi.Client/Availability/Users/UsersRequestBuilder.cs b/server/src/CPATapi.Client/Availability/Users/UsersRequestBuilder.cs new file mode 100644 index 0000000..2dc087d --- /dev/null +++ b/server/src/CPATapi.Client/Availability/Users/UsersRequestBuilder.cs @@ -0,0 +1,86 @@ +// +#pragma warning disable CS0618 +using Microsoft.Kiota.Abstractions.Extensions; +using Microsoft.Kiota.Abstractions.Serialization; +using Microsoft.Kiota.Abstractions; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using System.Threading; +using System; +namespace CPATapi.Client.Availability.Users +{ + /// + /// Builds and executes requests for operations under \Availability\users + /// + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + public partial class UsersRequestBuilder : BaseRequestBuilder + { + /// + /// Instantiates a new and sets the default values. + /// + /// Path parameters for the request + /// The request adapter to use to execute the requests. + public UsersRequestBuilder(Dictionary pathParameters, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/Availability/users", pathParameters) + { + } + /// + /// Instantiates a new and sets the default values. + /// + /// The raw URL to use for the request builder. + /// The request adapter to use to execute the requests. + public UsersRequestBuilder(string rawUrl, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/Availability/users", rawUrl) + { + } + /// A List<string> + /// Cancellation token to use when cancelling requests + /// Configuration for the request such as headers, query parameters, and middleware options. +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public async Task?> GetAsync(Action>? requestConfiguration = default, CancellationToken cancellationToken = default) + { +#nullable restore +#else + public async Task> GetAsync(Action> requestConfiguration = default, CancellationToken cancellationToken = default) + { +#endif + var requestInfo = ToGetRequestInformation(requestConfiguration); + var collectionResult = await RequestAdapter.SendPrimitiveCollectionAsync(requestInfo, default, cancellationToken).ConfigureAwait(false); + return collectionResult?.AsList(); + } + /// A + /// Configuration for the request such as headers, query parameters, and middleware options. +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public RequestInformation ToGetRequestInformation(Action>? requestConfiguration = default) + { +#nullable restore +#else + public RequestInformation ToGetRequestInformation(Action> requestConfiguration = default) + { +#endif + var requestInfo = new RequestInformation(Method.GET, UrlTemplate, PathParameters); + requestInfo.Configure(requestConfiguration); + requestInfo.Headers.TryAdd("Accept", "text/plain;q=0.9"); + return requestInfo; + } + /// + /// Returns a request builder with the provided arbitrary URL. Using this method means any other path or query parameters are ignored. + /// + /// A + /// The raw URL to use for the request builder. + public global::CPATapi.Client.Availability.Users.UsersRequestBuilder WithUrl(string rawUrl) + { + return new global::CPATapi.Client.Availability.Users.UsersRequestBuilder(rawUrl, RequestAdapter); + } + /// + /// Configuration for the request such as headers, query parameters, and middleware options. + /// + [Obsolete("This class is deprecated. Please use the generic RequestConfiguration class generated by the generator.")] + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + public partial class UsersRequestBuilderGetRequestConfiguration : RequestConfiguration + { + } + } +} +#pragma warning restore CS0618 diff --git a/server/src/CPATapi.Client/CPATapi.Client.csproj b/server/src/CPATapi.Client/CPATapi.Client.csproj new file mode 100644 index 0000000..88d1c6a --- /dev/null +++ b/server/src/CPATapi.Client/CPATapi.Client.csproj @@ -0,0 +1,23 @@ + + + + net10.0 + enable + enable + CPATapi.Client + Daniel Triendl + CP Solutions GmbH + 9.4.0 + true + + + + + + + + + + + + diff --git a/server/src/CPATapi.Client/CPATapiClient.cs b/server/src/CPATapi.Client/CPATapiClient.cs new file mode 100644 index 0000000..7342b17 --- /dev/null +++ b/server/src/CPATapi.Client/CPATapiClient.cs @@ -0,0 +1,61 @@ +// +#pragma warning disable CS0618 +using CPATapi.Client.Availability; +using CPATapi.Client.CallerId; +using CPATapi.Client.Contact; +using CPATapi.Client.Search; +using Microsoft.Kiota.Abstractions.Extensions; +using Microsoft.Kiota.Abstractions; +using Microsoft.Kiota.Serialization.Form; +using Microsoft.Kiota.Serialization.Json; +using Microsoft.Kiota.Serialization.Multipart; +using Microsoft.Kiota.Serialization.Text; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using System; +namespace CPATapi.Client +{ + /// + /// The main entry point of the SDK, exposes the configuration and the fluent API. + /// + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + public partial class CPATapiClient : BaseRequestBuilder + { + /// The Availability property + public global::CPATapi.Client.Availability.AvailabilityRequestBuilder Availability + { + get => new global::CPATapi.Client.Availability.AvailabilityRequestBuilder(PathParameters, RequestAdapter); + } + /// The CallerId property + public global::CPATapi.Client.CallerId.CallerIdRequestBuilder CallerId + { + get => new global::CPATapi.Client.CallerId.CallerIdRequestBuilder(PathParameters, RequestAdapter); + } + /// The Contact property + public global::CPATapi.Client.Contact.ContactRequestBuilder Contact + { + get => new global::CPATapi.Client.Contact.ContactRequestBuilder(PathParameters, RequestAdapter); + } + /// The Search property + public global::CPATapi.Client.Search.SearchRequestBuilder Search + { + get => new global::CPATapi.Client.Search.SearchRequestBuilder(PathParameters, RequestAdapter); + } + /// + /// Instantiates a new and sets the default values. + /// + /// The request adapter to use to execute the requests. + public CPATapiClient(IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}", new Dictionary()) + { + ApiClientBuilder.RegisterDefaultSerializer(); + ApiClientBuilder.RegisterDefaultSerializer(); + ApiClientBuilder.RegisterDefaultSerializer(); + ApiClientBuilder.RegisterDefaultSerializer(); + ApiClientBuilder.RegisterDefaultDeserializer(); + ApiClientBuilder.RegisterDefaultDeserializer(); + ApiClientBuilder.RegisterDefaultDeserializer(); + } + } +} +#pragma warning restore CS0618 diff --git a/server/src/CPATapi.Client/CallerId/CallerIdRequestBuilder.cs b/server/src/CPATapi.Client/CallerId/CallerIdRequestBuilder.cs new file mode 100644 index 0000000..39ebad2 --- /dev/null +++ b/server/src/CPATapi.Client/CallerId/CallerIdRequestBuilder.cs @@ -0,0 +1,48 @@ +// +#pragma warning disable CS0618 +using CPATapi.Client.CallerId.Item; +using Microsoft.Kiota.Abstractions.Extensions; +using Microsoft.Kiota.Abstractions; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using System; +namespace CPATapi.Client.CallerId +{ + /// + /// Builds and executes requests for operations under \CallerId + /// + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + public partial class CallerIdRequestBuilder : BaseRequestBuilder + { + /// Gets an item from the CPATapi.Client.CallerId.item collection + /// Unique identifier of the item + /// A + public global::CPATapi.Client.CallerId.Item.WithNumberItemRequestBuilder this[string position] + { + get + { + var urlTplParams = new Dictionary(PathParameters); + urlTplParams.Add("number", position); + return new global::CPATapi.Client.CallerId.Item.WithNumberItemRequestBuilder(urlTplParams, RequestAdapter); + } + } + /// + /// Instantiates a new and sets the default values. + /// + /// Path parameters for the request + /// The request adapter to use to execute the requests. + public CallerIdRequestBuilder(Dictionary pathParameters, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/CallerId", pathParameters) + { + } + /// + /// Instantiates a new and sets the default values. + /// + /// The raw URL to use for the request builder. + /// The request adapter to use to execute the requests. + public CallerIdRequestBuilder(string rawUrl, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/CallerId", rawUrl) + { + } + } +} +#pragma warning restore CS0618 diff --git a/server/src/CPATapi.Client/CallerId/Item/WithNumberItemRequestBuilder.cs b/server/src/CPATapi.Client/CallerId/Item/WithNumberItemRequestBuilder.cs new file mode 100644 index 0000000..ae592ca --- /dev/null +++ b/server/src/CPATapi.Client/CallerId/Item/WithNumberItemRequestBuilder.cs @@ -0,0 +1,91 @@ +// +#pragma warning disable CS0618 +using CPATapi.Client.Models; +using Microsoft.Kiota.Abstractions.Extensions; +using Microsoft.Kiota.Abstractions.Serialization; +using Microsoft.Kiota.Abstractions; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using System.Threading; +using System; +namespace CPATapi.Client.CallerId.Item +{ + /// + /// Builds and executes requests for operations under \CallerId\{number} + /// + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + public partial class WithNumberItemRequestBuilder : BaseRequestBuilder + { + /// + /// Instantiates a new and sets the default values. + /// + /// Path parameters for the request + /// The request adapter to use to execute the requests. + public WithNumberItemRequestBuilder(Dictionary pathParameters, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/CallerId/{number}", pathParameters) + { + } + /// + /// Instantiates a new and sets the default values. + /// + /// The raw URL to use for the request builder. + /// The request adapter to use to execute the requests. + public WithNumberItemRequestBuilder(string rawUrl, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/CallerId/{number}", rawUrl) + { + } + /// A + /// Cancellation token to use when cancelling requests + /// Configuration for the request such as headers, query parameters, and middleware options. + /// When receiving a 404 status code +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public async Task GetAsync(Action>? requestConfiguration = default, CancellationToken cancellationToken = default) + { +#nullable restore +#else + public async Task GetAsync(Action> requestConfiguration = default, CancellationToken cancellationToken = default) + { +#endif + var requestInfo = ToGetRequestInformation(requestConfiguration); + var errorMapping = new Dictionary> + { + { "404", global::CPATapi.Client.Models.ProblemDetails.CreateFromDiscriminatorValue }, + }; + return await RequestAdapter.SendAsync(requestInfo, global::CPATapi.Client.Models.TapiContact.CreateFromDiscriminatorValue, errorMapping, cancellationToken).ConfigureAwait(false); + } + /// A + /// Configuration for the request such as headers, query parameters, and middleware options. +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public RequestInformation ToGetRequestInformation(Action>? requestConfiguration = default) + { +#nullable restore +#else + public RequestInformation ToGetRequestInformation(Action> requestConfiguration = default) + { +#endif + var requestInfo = new RequestInformation(Method.GET, UrlTemplate, PathParameters); + requestInfo.Configure(requestConfiguration); + requestInfo.Headers.TryAdd("Accept", "application/json, text/plain;q=0.9"); + return requestInfo; + } + /// + /// Returns a request builder with the provided arbitrary URL. Using this method means any other path or query parameters are ignored. + /// + /// A + /// The raw URL to use for the request builder. + public global::CPATapi.Client.CallerId.Item.WithNumberItemRequestBuilder WithUrl(string rawUrl) + { + return new global::CPATapi.Client.CallerId.Item.WithNumberItemRequestBuilder(rawUrl, RequestAdapter); + } + /// + /// Configuration for the request such as headers, query parameters, and middleware options. + /// + [Obsolete("This class is deprecated. Please use the generic RequestConfiguration class generated by the generator.")] + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + public partial class WithNumberItemRequestBuilderGetRequestConfiguration : RequestConfiguration + { + } + } +} +#pragma warning restore CS0618 diff --git a/server/src/CPATapi.Client/Contact/ContactRequestBuilder.cs b/server/src/CPATapi.Client/Contact/ContactRequestBuilder.cs new file mode 100644 index 0000000..9d5a543 --- /dev/null +++ b/server/src/CPATapi.Client/Contact/ContactRequestBuilder.cs @@ -0,0 +1,87 @@ +// +#pragma warning disable CS0618 +using CPATapi.Client.Models; +using Microsoft.Kiota.Abstractions.Extensions; +using Microsoft.Kiota.Abstractions.Serialization; +using Microsoft.Kiota.Abstractions; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using System.Threading; +using System; +namespace CPATapi.Client.Contact +{ + /// + /// Builds and executes requests for operations under \Contact + /// + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + public partial class ContactRequestBuilder : BaseRequestBuilder + { + /// + /// Instantiates a new and sets the default values. + /// + /// Path parameters for the request + /// The request adapter to use to execute the requests. + public ContactRequestBuilder(Dictionary pathParameters, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/Contact", pathParameters) + { + } + /// + /// Instantiates a new and sets the default values. + /// + /// The raw URL to use for the request builder. + /// The request adapter to use to execute the requests. + public ContactRequestBuilder(string rawUrl, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/Contact", rawUrl) + { + } + /// A List<global::CPATapi.Client.Models.TapiContact> + /// Cancellation token to use when cancelling requests + /// Configuration for the request such as headers, query parameters, and middleware options. +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public async Task?> GetAsync(Action>? requestConfiguration = default, CancellationToken cancellationToken = default) + { +#nullable restore +#else + public async Task> GetAsync(Action> requestConfiguration = default, CancellationToken cancellationToken = default) + { +#endif + var requestInfo = ToGetRequestInformation(requestConfiguration); + var collectionResult = await RequestAdapter.SendCollectionAsync(requestInfo, global::CPATapi.Client.Models.TapiContact.CreateFromDiscriminatorValue, default, cancellationToken).ConfigureAwait(false); + return collectionResult?.AsList(); + } + /// A + /// Configuration for the request such as headers, query parameters, and middleware options. +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public RequestInformation ToGetRequestInformation(Action>? requestConfiguration = default) + { +#nullable restore +#else + public RequestInformation ToGetRequestInformation(Action> requestConfiguration = default) + { +#endif + var requestInfo = new RequestInformation(Method.GET, UrlTemplate, PathParameters); + requestInfo.Configure(requestConfiguration); + requestInfo.Headers.TryAdd("Accept", "application/json"); + return requestInfo; + } + /// + /// Returns a request builder with the provided arbitrary URL. Using this method means any other path or query parameters are ignored. + /// + /// A + /// The raw URL to use for the request builder. + public global::CPATapi.Client.Contact.ContactRequestBuilder WithUrl(string rawUrl) + { + return new global::CPATapi.Client.Contact.ContactRequestBuilder(rawUrl, RequestAdapter); + } + /// + /// Configuration for the request such as headers, query parameters, and middleware options. + /// + [Obsolete("This class is deprecated. Please use the generic RequestConfiguration class generated by the generator.")] + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + public partial class ContactRequestBuilderGetRequestConfiguration : RequestConfiguration + { + } + } +} +#pragma warning restore CS0618 diff --git a/server/src/CPATapi.Client/Models/Availability.cs b/server/src/CPATapi.Client/Models/Availability.cs new file mode 100644 index 0000000..0542390 --- /dev/null +++ b/server/src/CPATapi.Client/Models/Availability.cs @@ -0,0 +1,69 @@ +// +#pragma warning disable CS0618 +using Microsoft.Kiota.Abstractions.Extensions; +using Microsoft.Kiota.Abstractions.Serialization; +using System.Collections.Generic; +using System.IO; +using System; +namespace CPATapi.Client.Models +{ + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + #pragma warning disable CS1591 + public partial class Availability : IAdditionalDataHolder, IParsable + #pragma warning restore CS1591 + { + /// Stores additional data not described in the OpenAPI description found when deserializing. Can be used for serialization as well. + public IDictionary AdditionalData { get; set; } + /// The loggedIn property + public bool? LoggedIn { get; set; } + /// The user property +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public string? User { get; set; } +#nullable restore +#else + public string User { get; set; } +#endif + /// + /// Instantiates a new and sets the default values. + /// + public Availability() + { + AdditionalData = new Dictionary(); + } + /// + /// Creates a new instance of the appropriate class based on discriminator value + /// + /// A + /// The parse node to use to read the discriminator value and create the object + public static global::CPATapi.Client.Models.Availability CreateFromDiscriminatorValue(IParseNode parseNode) + { + if(ReferenceEquals(parseNode, null)) throw new ArgumentNullException(nameof(parseNode)); + return new global::CPATapi.Client.Models.Availability(); + } + /// + /// The deserialization information for the current model + /// + /// A IDictionary<string, Action<IParseNode>> + public virtual IDictionary> GetFieldDeserializers() + { + return new Dictionary> + { + { "loggedIn", n => { LoggedIn = n.GetBoolValue(); } }, + { "user", n => { User = n.GetStringValue(); } }, + }; + } + /// + /// Serializes information the current object + /// + /// Serialization writer to use to serialize this model + public virtual void Serialize(ISerializationWriter writer) + { + if(ReferenceEquals(writer, null)) throw new ArgumentNullException(nameof(writer)); + writer.WriteBoolValue("loggedIn", LoggedIn); + writer.WriteStringValue("user", User); + writer.WriteAdditionalData(AdditionalData); + } + } +} +#pragma warning restore CS0618 diff --git a/server/src/CPATapi.Client/Models/ProblemDetails.cs b/server/src/CPATapi.Client/Models/ProblemDetails.cs new file mode 100644 index 0000000..0a7c29e --- /dev/null +++ b/server/src/CPATapi.Client/Models/ProblemDetails.cs @@ -0,0 +1,108 @@ +// +#pragma warning disable CS0618 +using Microsoft.Kiota.Abstractions.Extensions; +using Microsoft.Kiota.Abstractions.Serialization; +using Microsoft.Kiota.Abstractions; +using System.Collections.Generic; +using System.IO; +using System; +namespace CPATapi.Client.Models +{ + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + #pragma warning disable CS1591 + public partial class ProblemDetails : ApiException, IAdditionalDataHolder, IParsable + #pragma warning restore CS1591 + { + /// Stores additional data not described in the OpenAPI description found when deserializing. Can be used for serialization as well. + public IDictionary AdditionalData { get; set; } + /// The detail property +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public string? Detail { get; set; } +#nullable restore +#else + public string Detail { get; set; } +#endif + /// The instance property +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public string? Instance { get; set; } +#nullable restore +#else + public string Instance { get; set; } +#endif + /// The primary error message. + public override string Message { get => base.Message; } + /// The status property +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public UntypedNode? Status { get; set; } +#nullable restore +#else + public UntypedNode Status { get; set; } +#endif + /// The title property +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public string? Title { get; set; } +#nullable restore +#else + public string Title { get; set; } +#endif + /// The type property +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public string? Type { get; set; } +#nullable restore +#else + public string Type { get; set; } +#endif + /// + /// Instantiates a new and sets the default values. + /// + public ProblemDetails() + { + AdditionalData = new Dictionary(); + } + /// + /// Creates a new instance of the appropriate class based on discriminator value + /// + /// A + /// The parse node to use to read the discriminator value and create the object + public static global::CPATapi.Client.Models.ProblemDetails CreateFromDiscriminatorValue(IParseNode parseNode) + { + if(ReferenceEquals(parseNode, null)) throw new ArgumentNullException(nameof(parseNode)); + return new global::CPATapi.Client.Models.ProblemDetails(); + } + /// + /// The deserialization information for the current model + /// + /// A IDictionary<string, Action<IParseNode>> + public virtual IDictionary> GetFieldDeserializers() + { + return new Dictionary> + { + { "detail", n => { Detail = n.GetStringValue(); } }, + { "instance", n => { Instance = n.GetStringValue(); } }, + { "status", n => { Status = n.GetObjectValue(UntypedNode.CreateFromDiscriminatorValue); } }, + { "title", n => { Title = n.GetStringValue(); } }, + { "type", n => { Type = n.GetStringValue(); } }, + }; + } + /// + /// Serializes information the current object + /// + /// Serialization writer to use to serialize this model + public virtual void Serialize(ISerializationWriter writer) + { + if(ReferenceEquals(writer, null)) throw new ArgumentNullException(nameof(writer)); + writer.WriteStringValue("detail", Detail); + writer.WriteStringValue("instance", Instance); + writer.WriteObjectValue("status", Status); + writer.WriteStringValue("title", Title); + writer.WriteStringValue("type", Type); + writer.WriteAdditionalData(AdditionalData); + } + } +} +#pragma warning restore CS0618 diff --git a/server/src/CPATapi.Client/Models/TapiContact.cs b/server/src/CPATapi.Client/Models/TapiContact.cs new file mode 100644 index 0000000..e3118bf --- /dev/null +++ b/server/src/CPATapi.Client/Models/TapiContact.cs @@ -0,0 +1,105 @@ +// +#pragma warning disable CS0618 +using Microsoft.Kiota.Abstractions.Extensions; +using Microsoft.Kiota.Abstractions.Serialization; +using System.Collections.Generic; +using System.IO; +using System; +namespace CPATapi.Client.Models +{ + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + #pragma warning disable CS1591 + public partial class TapiContact : IAdditionalDataHolder, IParsable + #pragma warning restore CS1591 + { + /// Stores additional data not described in the OpenAPI description found when deserializing. Can be used for serialization as well. + public IDictionary AdditionalData { get; set; } + /// The tD_ID property +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public string? TDID { get; set; } +#nullable restore +#else + public string TDID { get; set; } +#endif + /// The tD_MEDIUM property +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public string? TDMEDIUM { get; set; } +#nullable restore +#else + public string TDMEDIUM { get; set; } +#endif + /// The tD_NAME property +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public string? TDNAME { get; set; } +#nullable restore +#else + public string TDNAME { get; set; } +#endif + /// The tD_NUMBER property +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public string? TDNUMBER { get; set; } +#nullable restore +#else + public string TDNUMBER { get; set; } +#endif + /// The tD_NUMBER_TAPI property +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public string? TDNUMBERTAPI { get; set; } +#nullable restore +#else + public string TDNUMBERTAPI { get; set; } +#endif + /// + /// Instantiates a new and sets the default values. + /// + public TapiContact() + { + AdditionalData = new Dictionary(); + } + /// + /// Creates a new instance of the appropriate class based on discriminator value + /// + /// A + /// The parse node to use to read the discriminator value and create the object + public static global::CPATapi.Client.Models.TapiContact CreateFromDiscriminatorValue(IParseNode parseNode) + { + if(ReferenceEquals(parseNode, null)) throw new ArgumentNullException(nameof(parseNode)); + return new global::CPATapi.Client.Models.TapiContact(); + } + /// + /// The deserialization information for the current model + /// + /// A IDictionary<string, Action<IParseNode>> + public virtual IDictionary> GetFieldDeserializers() + { + return new Dictionary> + { + { "tD_ID", n => { TDID = n.GetStringValue(); } }, + { "tD_MEDIUM", n => { TDMEDIUM = n.GetStringValue(); } }, + { "tD_NAME", n => { TDNAME = n.GetStringValue(); } }, + { "tD_NUMBER", n => { TDNUMBER = n.GetStringValue(); } }, + { "tD_NUMBER_TAPI", n => { TDNUMBERTAPI = n.GetStringValue(); } }, + }; + } + /// + /// Serializes information the current object + /// + /// Serialization writer to use to serialize this model + public virtual void Serialize(ISerializationWriter writer) + { + if(ReferenceEquals(writer, null)) throw new ArgumentNullException(nameof(writer)); + writer.WriteStringValue("tD_ID", TDID); + writer.WriteStringValue("tD_MEDIUM", TDMEDIUM); + writer.WriteStringValue("tD_NAME", TDNAME); + writer.WriteStringValue("tD_NUMBER", TDNUMBER); + writer.WriteStringValue("tD_NUMBER_TAPI", TDNUMBERTAPI); + writer.WriteAdditionalData(AdditionalData); + } + } +} +#pragma warning restore CS0618 diff --git a/server/src/CPATapi.Client/Search/SearchRequestBuilder.cs b/server/src/CPATapi.Client/Search/SearchRequestBuilder.cs new file mode 100644 index 0000000..92313ce --- /dev/null +++ b/server/src/CPATapi.Client/Search/SearchRequestBuilder.cs @@ -0,0 +1,102 @@ +// +#pragma warning disable CS0618 +using CPATapi.Client.Models; +using Microsoft.Kiota.Abstractions.Extensions; +using Microsoft.Kiota.Abstractions.Serialization; +using Microsoft.Kiota.Abstractions; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using System.Threading; +using System; +namespace CPATapi.Client.Search +{ + /// + /// Builds and executes requests for operations under \Search + /// + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + public partial class SearchRequestBuilder : BaseRequestBuilder + { + /// + /// Instantiates a new and sets the default values. + /// + /// Path parameters for the request + /// The request adapter to use to execute the requests. + public SearchRequestBuilder(Dictionary pathParameters, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/Search{?query*}", pathParameters) + { + } + /// + /// Instantiates a new and sets the default values. + /// + /// The raw URL to use for the request builder. + /// The request adapter to use to execute the requests. + public SearchRequestBuilder(string rawUrl, IRequestAdapter requestAdapter) : base(requestAdapter, "{+baseurl}/Search{?query*}", rawUrl) + { + } + /// A List<global::CPATapi.Client.Models.TapiContact> + /// Cancellation token to use when cancelling requests + /// Configuration for the request such as headers, query parameters, and middleware options. +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public async Task?> GetAsync(Action>? requestConfiguration = default, CancellationToken cancellationToken = default) + { +#nullable restore +#else + public async Task> GetAsync(Action> requestConfiguration = default, CancellationToken cancellationToken = default) + { +#endif + var requestInfo = ToGetRequestInformation(requestConfiguration); + var collectionResult = await RequestAdapter.SendCollectionAsync(requestInfo, global::CPATapi.Client.Models.TapiContact.CreateFromDiscriminatorValue, default, cancellationToken).ConfigureAwait(false); + return collectionResult?.AsList(); + } + /// A + /// Configuration for the request such as headers, query parameters, and middleware options. +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + public RequestInformation ToGetRequestInformation(Action>? requestConfiguration = default) + { +#nullable restore +#else + public RequestInformation ToGetRequestInformation(Action> requestConfiguration = default) + { +#endif + var requestInfo = new RequestInformation(Method.GET, UrlTemplate, PathParameters); + requestInfo.Configure(requestConfiguration); + requestInfo.Headers.TryAdd("Accept", "text/plain;q=0.9"); + return requestInfo; + } + /// + /// Returns a request builder with the provided arbitrary URL. Using this method means any other path or query parameters are ignored. + /// + /// A + /// The raw URL to use for the request builder. + public global::CPATapi.Client.Search.SearchRequestBuilder WithUrl(string rawUrl) + { + return new global::CPATapi.Client.Search.SearchRequestBuilder(rawUrl, RequestAdapter); + } + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + #pragma warning disable CS1591 + public partial class SearchRequestBuilderGetQueryParameters + #pragma warning restore CS1591 + { +#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER +#nullable enable + [QueryParameter("query")] + public string? Query { get; set; } +#nullable restore +#else + [QueryParameter("query")] + public string Query { get; set; } +#endif + } + /// + /// Configuration for the request such as headers, query parameters, and middleware options. + /// + [Obsolete("This class is deprecated. Please use the generic RequestConfiguration class generated by the generator.")] + [global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")] + public partial class SearchRequestBuilderGetRequestConfiguration : RequestConfiguration + { + } + } +} +#pragma warning restore CS0618 diff --git a/server/src/CPATapi.Client/ServiceExtensions.cs b/server/src/CPATapi.Client/ServiceExtensions.cs new file mode 100644 index 0000000..d97241d --- /dev/null +++ b/server/src/CPATapi.Client/ServiceExtensions.cs @@ -0,0 +1,53 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Kiota.Abstractions.Authentication; +using Microsoft.Kiota.Http.HttpClientLibrary; + +namespace CPATapi.Client; + +public static class ServiceExtensions +{ + public static IServiceCollection AddCPATapiClient(this IServiceCollection services, Action configureOptions) + { + services.AddKiotaHandlers(); + services.AddHttpClient((sp, client) => + { + configureOptions.Invoke(sp, client); + }).AttachKiotaHandlers(); + services.AddTransient(sp => sp.GetRequiredService().GetClient()); + return services; + } + + private static IServiceCollection AddKiotaHandlers(this IServiceCollection services) + { + var handlers = KiotaClientFactory.GetDefaultHandlerActivatableTypes(); + foreach (var handler in handlers) + { + if (services.All(s => s.ServiceType != handler)) + { + services.AddScoped(handler); + } + } + return services; + } + + private static IHttpClientBuilder AttachKiotaHandlers(this IHttpClientBuilder builder) + { + var handlers = KiotaClientFactory.GetDefaultHandlerActivatableTypes(); + foreach (var handler in handlers) + { + builder.AddHttpMessageHandler((sp) => (DelegatingHandler)sp.GetRequiredService(handler)); + } + return builder; + } +} + +internal class CPATapiClientFactory(HttpClient httpClient) +{ + private readonly HttpClient _httpClient = httpClient; + private readonly AnonymousAuthenticationProvider _authenticationProvider = new(); + + public CPATapiClient GetClient() + { + return new CPATapiClient(new HttpClientRequestAdapter(_authenticationProvider, httpClient: _httpClient)); + } +} diff --git a/server/src/CPATapi.Client/kiota-lock.json b/server/src/CPATapi.Client/kiota-lock.json new file mode 100644 index 0000000..446a473 --- /dev/null +++ b/server/src/CPATapi.Client/kiota-lock.json @@ -0,0 +1,34 @@ +{ + "descriptionHash": "1B47F98D82C5E24FB3ABEDB3BF90615424A8F19620EA2621D23B7FC69F4F7BF27D512A11098EF4D8940C7D243DEEB59C0CA038264430AD9150B612F5046C8146", + "descriptionLocation": "../CPATapi.Server/CPATapi.Server.json", + "lockFileVersion": "1.0.0", + "kiotaVersion": "1.30.0", + "clientClassName": "CPATapiClient", + "typeAccessModifier": "Public", + "clientNamespaceName": "CPATapi.Client", + "language": "CSharp", + "usesBackingStore": false, + "excludeBackwardCompatible": false, + "includeAdditionalData": true, + "disableSSLValidation": false, + "serializers": [ + "Microsoft.Kiota.Serialization.Json.JsonSerializationWriterFactory", + "Microsoft.Kiota.Serialization.Text.TextSerializationWriterFactory", + "Microsoft.Kiota.Serialization.Form.FormSerializationWriterFactory", + "Microsoft.Kiota.Serialization.Multipart.MultipartSerializationWriterFactory" + ], + "deserializers": [ + "Microsoft.Kiota.Serialization.Json.JsonParseNodeFactory", + "Microsoft.Kiota.Serialization.Text.TextParseNodeFactory", + "Microsoft.Kiota.Serialization.Form.FormParseNodeFactory" + ], + "structuredMimeTypes": [ + "application/json", + "text/plain;q=0.9", + "application/x-www-form-urlencoded;q=0.2", + "multipart/form-data;q=0.1" + ], + "includePatterns": [], + "excludePatterns": [], + "disabledValidationRules": [] +} \ No newline at end of file diff --git a/server/test/CPATapi.Client.Tests/CPATapi.Client.Tests.csproj b/server/test/CPATapi.Client.Tests/CPATapi.Client.Tests.csproj new file mode 100644 index 0000000..53ce678 --- /dev/null +++ b/server/test/CPATapi.Client.Tests/CPATapi.Client.Tests.csproj @@ -0,0 +1,27 @@ + + + + net10.0 + latest + enable + enable + false + + + + + + + + + + + + + + + + + + + diff --git a/server/test/CPATapi.Client.Tests/CPATapiClientTests.cs b/server/test/CPATapi.Client.Tests/CPATapiClientTests.cs new file mode 100644 index 0000000..56ae55e --- /dev/null +++ b/server/test/CPATapi.Client.Tests/CPATapiClientTests.cs @@ -0,0 +1,45 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace CPATapi.Client.Tests; + +public class CPATapiClientTests +{ + private IServiceScope CreateServices() + { + var services = new ServiceCollection(); + services.AddCPATapiClient(((provider, client) => + { + client.BaseAddress = new Uri("https://3cxtapi.cp-austria.at/"); + })); + var sp = services.BuildServiceProvider(); + return sp.CreateScope(); + } + + [Test] + public async Task TestContactsGet() + { + using var scope = CreateServices(); + var client = scope.ServiceProvider.GetRequiredService(); + var contacts = await client.Contact.GetAsync(); + Assert.That(contacts, Is.Not.Null); + Assert.That(contacts, Is.Not.Empty); + } + + [Test] + public async Task TestAvailabilityGet() + { + using var scope = CreateServices(); + var client = scope.ServiceProvider.GetRequiredService(); + var availability = await client.Availability["CPATRD"].GetAsync(); + Assert.That(availability, Is.Not.Null); + } + + [Test] + public async Task TestAvailabilityGetUnknown() + { + using var scope = CreateServices(); + var client = scope.ServiceProvider.GetRequiredService(); + var availability = await client.Availability["Unknown"].GetAsync(); + Assert.That(availability, Is.Not.Null); + } +}