From 28097fe18abbe7c877a147c5d77e184fc4384d26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sundstro=CC=88m?= Date: Wed, 12 May 2021 16:03:41 +0200 Subject: [PATCH] Add QueryResult --- Test/Program.cs | 37 +++++++++ Test/Test.csproj | 12 +++ WordPressPCL/Client/CRUDOperation.cs | 7 +- WordPressPCL/Client/Media.cs | 7 +- WordPressPCL/Client/Taxonomies.cs | 7 +- WordPressPCL/Client/Users.cs | 7 +- WordPressPCL/Interfaces/IQueryOperation.cs | 3 +- WordPressPCL/Models/QueryResult.cs | 34 +++++++++ WordPressPCL/WordPressPCL.xml | 89 ++++++++++++---------- 9 files changed, 155 insertions(+), 48 deletions(-) create mode 100644 Test/Program.cs create mode 100644 Test/Test.csproj create mode 100644 WordPressPCL/Models/QueryResult.cs diff --git a/Test/Program.cs b/Test/Program.cs new file mode 100644 index 0000000..ec0f011 --- /dev/null +++ b/Test/Program.cs @@ -0,0 +1,37 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using System.Text.Json; +using WordPressPCL; +using WordPressPCL.Client; +using WordPressPCL.Models; +using WordPressPCL.Utility; + +namespace Test +{ + class Program + { + public static string SiteUri = "mysite.wordpress.com"; + public static string WordPressUri = $"https://public-api.wordpress.com/wp/v2/sites/{SiteUri}/"; + + static async Task Main(string[] args) + { + var client = new WordPressClient(WordPressUri, ""); + + var queryBuilder = new PostsQueryBuilder() + { + Page = 1, + PerPage = 15, + OrderBy = PostsOrderBy.Title, + Order = Order.ASC, + Statuses = new Status[] { Status.Publish }, + Embed = true + }; + var queryresult = await client.Posts.Query(queryBuilder); + + Console.WriteLine(queryresult.Total); + Console.WriteLine(queryresult.TotalPages); + Console.WriteLine(JsonSerializer.Serialize(queryresult.Count())); + } + } +} diff --git a/Test/Test.csproj b/Test/Test.csproj new file mode 100644 index 0000000..219de8a --- /dev/null +++ b/Test/Test.csproj @@ -0,0 +1,12 @@ + + + + + + + + Exe + net5.0 + + + diff --git a/WordPressPCL/Client/CRUDOperation.cs b/WordPressPCL/Client/CRUDOperation.cs index e631346..f7ff958 100644 --- a/WordPressPCL/Client/CRUDOperation.cs +++ b/WordPressPCL/Client/CRUDOperation.cs @@ -131,9 +131,12 @@ public Task GetByID(object ID, bool embed = false, bool useAuth = false) /// Query builder with specific parameters /// Send request with authentication header /// List of filtered result - public Task> Query(QClass queryBuilder, bool useAuth = false) + public async Task> Query(QClass queryBuilder, bool useAuth = false) { - return HttpHelper.GetRequest>($"{DefaultPath}{MethodPath}{queryBuilder.BuildQueryURL()}", false, useAuth); + var result = await HttpHelper.GetRequest>($"{DefaultPath}{MethodPath}{queryBuilder.BuildQueryURL()}", false, useAuth); + int total = System.Convert.ToInt32(HttpHelper.LastResponseHeaders.GetValues("X-WP-Total").FirstOrDefault()); + int totalpages = System.Convert.ToInt32(HttpHelper.LastResponseHeaders.GetValues("X-WP-TotalPages").FirstOrDefault()); + return new QueryResult(result, total, totalpages); } /// diff --git a/WordPressPCL/Client/Media.cs b/WordPressPCL/Client/Media.cs index 5c3a739..8d627b0 100644 --- a/WordPressPCL/Client/Media.cs +++ b/WordPressPCL/Client/Media.cs @@ -159,9 +159,12 @@ public Task GetByID(object ID, bool embed = false, bool useAuth = fal /// Query builder with specific parameters /// Send request with authentication header /// List of filtered result - public Task> Query(MediaQueryBuilder queryBuilder, bool useAuth = false) + public async Task> Query(MediaQueryBuilder queryBuilder, bool useAuth = false) { - return _httpHelper.GetRequest>($"{_defaultPath}{_methodPath}{queryBuilder.BuildQueryURL()}", false, useAuth); + var results = await _httpHelper.GetRequest>($"{_defaultPath}{_methodPath}{queryBuilder.BuildQueryURL()}", false, useAuth); + int total = System.Convert.ToInt32(_httpHelper.LastResponseHeaders.GetValues("X-WP-Total").FirstOrDefault()); + int totalpages = System.Convert.ToInt32(_httpHelper.LastResponseHeaders.GetValues("X-WP-TotalPages").FirstOrDefault()); + return new QueryResult(results, total, totalpages); } /// diff --git a/WordPressPCL/Client/Taxonomies.cs b/WordPressPCL/Client/Taxonomies.cs index d9e6b74..58448f6 100644 --- a/WordPressPCL/Client/Taxonomies.cs +++ b/WordPressPCL/Client/Taxonomies.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using WordPressPCL.Interfaces; using WordPressPCL.Models; @@ -78,7 +79,7 @@ public Task GetByID(object ID, bool embed = false, bool useAuth = fals /// Query builder with specific parameters /// Send request with authentication header /// List of filtered result - public async Task> Query(TaxonomiesQueryBuilder queryBuilder, bool useAuth = false) + public async Task> Query(TaxonomiesQueryBuilder queryBuilder, bool useAuth = false) { List entities = new List(); var entities_dict = await _httpHelper.GetRequest>($"{_defaultPath}{_methodPath}{queryBuilder.BuildQueryURL()}", false, useAuth).ConfigureAwait(false); @@ -86,7 +87,9 @@ public async Task> Query(TaxonomiesQueryBuilder queryBuild { entities.Add(ent.Value); } - return entities; + int total = System.Convert.ToInt32(_httpHelper.LastResponseHeaders.GetValues("X-WP-Total").FirstOrDefault()); + int totalpages = System.Convert.ToInt32(_httpHelper.LastResponseHeaders.GetValues("X-WP-TotalPages").FirstOrDefault()); + return new QueryResult(entities, total, totalpages); } } } \ No newline at end of file diff --git a/WordPressPCL/Client/Users.cs b/WordPressPCL/Client/Users.cs index d833037..e1ee30f 100644 --- a/WordPressPCL/Client/Users.cs +++ b/WordPressPCL/Client/Users.cs @@ -98,9 +98,12 @@ public Task GetByID(object ID, bool embed = false, bool useAuth = false) /// Query builder with specific parameters /// Send request with authentication header /// List of filtered result - public Task> Query(UsersQueryBuilder queryBuilder, bool useAuth = false) + public async Task> Query(UsersQueryBuilder queryBuilder, bool useAuth = false) { - return _httpHelper.GetRequest>($"{_defaultPath}{METHOD_PATH}{queryBuilder.BuildQueryURL()}", false, useAuth); + var results = await _httpHelper.GetRequest>($"{_defaultPath}{METHOD_PATH}{queryBuilder.BuildQueryURL()}", false, useAuth); + int total = System.Convert.ToInt32(_httpHelper.LastResponseHeaders.GetValues("X-WP-Total").FirstOrDefault()); + int totalpages = System.Convert.ToInt32(_httpHelper.LastResponseHeaders.GetValues("X-WP-TotalPages").FirstOrDefault()); + return new QueryResult(results, total, totalpages); } /// diff --git a/WordPressPCL/Interfaces/IQueryOperation.cs b/WordPressPCL/Interfaces/IQueryOperation.cs index 8c82152..32e0524 100644 --- a/WordPressPCL/Interfaces/IQueryOperation.cs +++ b/WordPressPCL/Interfaces/IQueryOperation.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Threading.Tasks; +using WordPressPCL.Models; using WordPressPCL.Utility; namespace WordPressPCL.Interfaces @@ -17,6 +18,6 @@ public interface IQueryOperation where QClass : QueryBuilder /// query builder with parameters for query /// Is use auth header /// list of filtered objects - Task> Query(QClass queryBuilder, bool useAuth = false); + Task> Query(QClass queryBuilder, bool useAuth = false); } } \ No newline at end of file diff --git a/WordPressPCL/Models/QueryResult.cs b/WordPressPCL/Models/QueryResult.cs new file mode 100644 index 0000000..d4c6a6a --- /dev/null +++ b/WordPressPCL/Models/QueryResult.cs @@ -0,0 +1,34 @@ +using System.Collections; +using System.Collections.Generic; + +namespace WordPressPCL.Models +{ + /// + /// Base class for query results + /// + public class QueryResult : IEnumerable + { + private readonly IEnumerable items; + + public QueryResult(IEnumerable items, int total, int totalPages) + { + this.items = items; + Total = total; + TotalPages = totalPages; + } + + public int Total { get; } + + public int TotalPages { get; } + + public IEnumerator GetEnumerator() + { + return items.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} \ No newline at end of file diff --git a/WordPressPCL/WordPressPCL.xml b/WordPressPCL/WordPressPCL.xml index 0b478c6..cec7612 100644 --- a/WordPressPCL/WordPressPCL.xml +++ b/WordPressPCL/WordPressPCL.xml @@ -610,6 +610,19 @@ Current User + + + Update Entity + + Entity object + Updated object + + + + Get current User + + Current User + Delete user with reassign articles @@ -690,17 +703,7 @@ Get latest - - Is use embed info - Is use auth header - requested object - - - - Get object by Id - - Object Id - Is use embed info + aram> Is use auth header requested object @@ -810,6 +813,22 @@ Number of published posts for the term. + dentifier for the object. + + + Read only + Context: view, edit, embed + + + + + Terms of the type category + + + + + Number of published posts for the term. + Read only Context: view, edit @@ -908,20 +927,7 @@ The date the object was published. - Context: view, edit, embed - - - - The date the object was published as GMT. - - Context: view, edit - - - - The content for the object. - - - Context: view, edit, embed + Context: view, edit,Context: view, edit, embed @@ -2453,6 +2459,20 @@ Context: view, edit, embed + + + dels.PostType.Taxonomies"> + + List of taxonomies + + Context: edit + + + + REST base route for the taxonomy. + + Context: view, edit, embed + Links to related resources @@ -2463,6 +2483,11 @@ Default constructor + + + Base class for query results + + WordPress main settings @@ -4002,18 +4027,4 @@ - - - - Gets the JWToken from the client - - - - - - Store Application Password in the Client - - - -