Skip to content

Commit b422493

Browse files
Merge pull request #391 from notion-dotnet/feature/375-support-querying-wiki-databases
Add support for querying wiki databases
2 parents 95d0b68 + 8236df3 commit b422493

File tree

12 files changed

+141
-27
lines changed

12 files changed

+141
-27
lines changed

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

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
using System.Collections.Generic;
2-
using System.Linq;
3-
using System.Threading;
1+
using System.Threading;
42
using System.Threading.Tasks;
53
using static Notion.Client.ApiEndpoints;
64

75
namespace Notion.Client
86
{
9-
public class DatabasesClient : IDatabasesClient
7+
public sealed partial class DatabasesClient : IDatabasesClient
108
{
119
private readonly IRestClient _client;
1210

@@ -20,24 +18,6 @@ public async Task<Database> RetrieveAsync(string databaseId, CancellationToken c
2018
return await _client.GetAsync<Database>(DatabasesApiUrls.Retrieve(databaseId), cancellationToken: cancellationToken);
2119
}
2220

23-
public async Task<PaginatedList<Page>> QueryAsync(
24-
string databaseId,
25-
DatabasesQueryParameters databasesQueryParameters, CancellationToken cancellationToken = default)
26-
{
27-
var body = (IDatabaseQueryBodyParameters)databasesQueryParameters;
28-
var queryParameters = (IDatabaseQueryQueryParameters)databasesQueryParameters;
29-
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-
);
39-
}
40-
4121
public async Task<Database> CreateAsync(DatabasesCreateParameters databasesCreateParameters, CancellationToken cancellationToken = default)
4222
{
4323
var body = (IDatabasesCreateBodyParameters)databasesCreateParameters;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public interface IDatabasesClient
2424
/// <returns>
2525
/// <see cref="PaginatedList{T}" />
2626
/// </returns>
27-
Task<PaginatedList<Page>> QueryAsync(string databaseId, DatabasesQueryParameters databasesQueryParameters, CancellationToken cancellationToken = default);
27+
Task<DatabaseQueryResponse> QueryAsync(string databaseId, DatabasesQueryParameters databasesQueryParameters, CancellationToken cancellationToken = default);
2828

2929
/// <summary>
3030
/// Creates a database as a subpage in the specified parent page, with the specified properties schema.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using System.Threading;
4+
using System.Threading.Tasks;
5+
6+
namespace Notion.Client
7+
{
8+
public sealed partial class DatabasesClient
9+
{
10+
public async Task<DatabaseQueryResponse> QueryAsync(
11+
string databaseId,
12+
DatabasesQueryParameters databasesQueryParameters, CancellationToken cancellationToken = default)
13+
{
14+
var body = (IDatabaseQueryBodyParameters)databasesQueryParameters;
15+
var queryParameters = (IDatabaseQueryQueryParameters)databasesQueryParameters;
16+
17+
var queryParams = queryParameters.FilterProperties?
18+
.Select(x => new KeyValuePair<string, string>("filter_properties", x));
19+
20+
return await _client.PostAsync<DatabaseQueryResponse>(
21+
ApiEndpoints.DatabasesApiUrls.Query(databaseId),
22+
body,
23+
queryParams,
24+
cancellationToken: cancellationToken
25+
);
26+
}
27+
}
28+
}

Src/Notion.Client/Api/Databases/RequestParams/DatabasesQueryParameters.cs renamed to Src/Notion.Client/Api/Databases/Query/Request/DatabasesQueryParameters.cs

File renamed without changes.

Src/Notion.Client/Api/Databases/RequestParams/IDatabaseQueryBodyParameters.cs renamed to Src/Notion.Client/Api/Databases/Query/Request/IDatabaseQueryBodyParameters.cs

File renamed without changes.

Src/Notion.Client/Api/Databases/RequestParams/IDatabaseQueryQueryParameters.cs renamed to Src/Notion.Client/Api/Databases/Query/Request/IDatabaseQueryQueryParameters.cs

File renamed without changes.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace Notion.Client
2+
{
3+
// ReSharper disable once ClassNeverInstantiated.Global
4+
public class DatabaseQueryResponse : PaginatedList<IWikiDatabase>
5+
{
6+
}
7+
}

Src/Notion.Client/Models/Database/Database.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace Notion.Client
66
{
7-
public class Database : IObject, IObjectModificationData
7+
public class Database : IObject, IObjectModificationData, IWikiDatabase
88
{
99
[JsonProperty("title")]
1010
public List<RichTextBase> Title { get; set; }
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using JsonSubTypes;
2+
using Newtonsoft.Json;
3+
4+
namespace Notion.Client
5+
{
6+
[JsonConverter(typeof(JsonSubtypes), "object")]
7+
[JsonSubtypes.KnownSubTypeAttribute(typeof(Page), ObjectType.Page)]
8+
[JsonSubtypes.KnownSubTypeAttribute(typeof(Database), ObjectType.Database)]
9+
public interface IWikiDatabase : IObject
10+
{
11+
}
12+
}

Src/Notion.Client/Models/Page/Page.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace Notion.Client
66
{
7-
public class Page : IObject, IObjectModificationData
7+
public class Page : IObject, IObjectModificationData, IWikiDatabase
88
{
99
/// <summary>
1010
/// The parent of this page. Can be a database, page, or workspace.

0 commit comments

Comments
 (0)