Skip to content

Commit bec3f62

Browse files
Merge pull request #381 from notion-dotnet/370-add-support-for-filter_properties-to-query-database-api
Add support for `filter_properties` in Database query api query params
2 parents 4a2bdb5 + 64d122c commit bec3f62

File tree

6 files changed

+32
-8
lines changed

6 files changed

+32
-8
lines changed

Src/Notion.Client/Api/Databases/DatabasesClient.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using System.Threading;
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using System.Threading;
24
using System.Threading.Tasks;
35
using static Notion.Client.ApiEndpoints;
46

@@ -23,8 +25,17 @@ public async Task<PaginatedList<Page>> QueryAsync(
2325
DatabasesQueryParameters databasesQueryParameters, CancellationToken cancellationToken = default)
2426
{
2527
var body = (IDatabaseQueryBodyParameters)databasesQueryParameters;
28+
var queryParameters = (IDatabaseQueryQueryParameters)databasesQueryParameters;
2629

27-
return await _client.PostAsync<PaginatedList<Page>>(DatabasesApiUrls.Query(databaseId), body, cancellationToken: cancellationToken);
30+
var queryParams = queryParameters.FilterProperties?
31+
.Select(x => new KeyValuePair<string, string>("filter_properties", x));
32+
33+
return await _client.PostAsync<PaginatedList<Page>>(
34+
DatabasesApiUrls.Query(databaseId),
35+
body,
36+
queryParams,
37+
cancellationToken: cancellationToken
38+
);
2839
}
2940

3041
public async Task<Database> CreateAsync(DatabasesCreateParameters databasesCreateParameters, CancellationToken cancellationToken = default)

Src/Notion.Client/Api/Databases/RequestParams/DatabasesQueryParameters.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Notion.Client
44
{
5-
public class DatabasesQueryParameters : IDatabaseQueryBodyParameters
5+
public class DatabasesQueryParameters : IDatabaseQueryBodyParameters, IDatabaseQueryQueryParameters
66
{
77
public Filter Filter { get; set; }
88

@@ -11,5 +11,7 @@ public class DatabasesQueryParameters : IDatabaseQueryBodyParameters
1111
public string StartCursor { get; set; }
1212

1313
public int? PageSize { get; set; }
14+
15+
public List<string> FilterProperties { get; set; }
1416
}
1517
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System.Collections.Generic;
2+
using Newtonsoft.Json;
3+
4+
namespace Notion.Client
5+
{
6+
public interface IDatabaseQueryQueryParameters
7+
{
8+
[JsonProperty("filter_properties")]
9+
List<string> FilterProperties { get; set; }
10+
}
11+
}

Src/Notion.Client/RestClient/IRestClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Task<T> GetAsync<T>(
1717
Task<T> PostAsync<T>(
1818
string uri,
1919
object body,
20-
IDictionary<string, string> queryParams = null,
20+
IEnumerable<KeyValuePair<string, string>> queryParams = null,
2121
IDictionary<string, string> headers = null,
2222
JsonSerializerSettings serializerSettings = null,
2323
CancellationToken cancellationToken = default);

Src/Notion.Client/RestClient/RestClient.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public async Task<T> GetAsync<T>(
4545
public async Task<T> PostAsync<T>(
4646
string uri,
4747
object body,
48-
IDictionary<string, string> queryParams = null,
48+
IEnumerable<KeyValuePair<string, string>> queryParams = null,
4949
IDictionary<string, string> headers = null,
5050
JsonSerializerSettings serializerSettings = null,
5151
CancellationToken cancellationToken = default)
@@ -125,7 +125,7 @@ private static async Task<Exception> BuildException(HttpResponseMessage response
125125
private async Task<HttpResponseMessage> SendAsync(
126126
string requestUri,
127127
HttpMethod httpMethod,
128-
IDictionary<string, string> queryParams = null,
128+
IEnumerable<KeyValuePair<string, string>> queryParams = null,
129129
IDictionary<string, string> headers = null,
130130
Action<HttpRequestMessage> attachContent = null,
131131
CancellationToken cancellationToken = default)
@@ -176,7 +176,7 @@ private void EnsureHttpClient()
176176
_httpClient.BaseAddress = new Uri(_options.BaseUrl);
177177
}
178178

179-
private static string AddQueryString(string uri, IDictionary<string, string> queryParams)
179+
private static string AddQueryString(string uri, IEnumerable<KeyValuePair<string, string>> queryParams)
180180
{
181181
return queryParams == null ? uri : QueryHelpers.AddQueryString(uri, queryParams);
182182
}

Src/Notion.Client/http/QueryHelpers.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public static string AddQueryString(string uri, IDictionary<string, string> quer
4545
return AddQueryString(uri, (IEnumerable<KeyValuePair<string, string>>)queryParams);
4646
}
4747

48-
private static string AddQueryString(
48+
public static string AddQueryString(
4949
string uri,
5050
IEnumerable<KeyValuePair<string, string>> queryParams)
5151
{

0 commit comments

Comments
 (0)