Skip to content

Commit 1cb7607

Browse files
Merge pull request #201 from notion-dotnet/feature/175-retrieve-page-property-item
Add support for Retrieve page property item endpoint
2 parents 815d879 + d079e44 commit 1cb7607

31 files changed

+441
-26
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ var complexFiler = new CompoundFilter(
118118
- [x] Retrieve a page
119119
- [x] Create a page
120120
- [x] Update page
121+
- [x] Retrieve page property item
121122
- [x] Blocks
122123
- [x] Retrieve a block
123124
- [x] Update a block

Src/Notion.Client/Api/ApiEndpoints.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,14 @@ public static class PagesApiUrls
4747
public static string Retrieve(string pageId) => $"/v1/pages/{pageId}";
4848
public static string Update(string pageId) => $"/v1/pages/{pageId}";
4949
public static string UpdateProperties(string pageId) => $"/v1/pages/{pageId}";
50+
51+
/// <summary>
52+
/// Get the <see cref="uri string"/> for retrieve page property item
53+
/// </summary>
54+
/// <param name="pageId">Identifier for a Notion Page</param>
55+
/// <param name="propertyId">Identifier for a Notion Property</param>
56+
/// <returns></returns>
57+
public static string RetrievePropertyItem(string pageId, string propertyId) => $"/v1/pages/{pageId}/properties/{propertyId}";
5058
}
5159

5260
public static class SearchApiUrls

Src/Notion.Client/Api/Pages/IPagesClient.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,12 @@ IDictionary<string, PropertyValue> updatedProperties
3131
/// <param name="pagesUpdateParameters"></param>
3232
/// <returns>Updated page.</returns>
3333
Task<Page> UpdateAsync(string pageId, PagesUpdateParameters pagesUpdateParameters);
34+
35+
/// <summary>
36+
/// Retrieves a property_item object for a given pageId and propertyId. Depending on the property type, the object returned will either be a value or a paginated list of property item values.
37+
/// </summary>
38+
/// <param name="retrievePropertyItemParameters">sdf sd</param>
39+
/// <returns><see cref="IPropertyItemObject"/></returns>
40+
Task<IPropertyItemObject> RetrievePagePropertyItem(RetrievePropertyItemParameters retrievePropertyItemParameters);
3441
}
3542
}

Src/Notion.Client/Api/Pages/PagesClient.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,22 @@ public async Task<Page> RetrieveAsync(string pageId)
5151
return await _client.GetAsync<Page>(url);
5252
}
5353

54+
public async Task<IPropertyItemObject> RetrievePagePropertyItem(RetrievePropertyItemParameters retrievePropertyItemParameters)
55+
{
56+
var pathParameters = (IRetrievePropertyItemPathParameters)retrievePropertyItemParameters;
57+
var queryParameters = (IRetrievePropertyQueryParameters)retrievePropertyItemParameters;
58+
59+
var url = PagesApiUrls.RetrievePropertyItem(pathParameters.PageId, pathParameters.PropertyId);
60+
61+
var queryParams = new Dictionary<string, string>()
62+
{
63+
{ "start_cursor", queryParameters?.StartCursor },
64+
{ "page_size", queryParameters?.PageSize?.ToString() }
65+
};
66+
67+
return await _client.GetAsync<IPropertyItemObject>(url, queryParams);
68+
}
69+
5470
public async Task<Page> UpdateAsync(string pageId, PagesUpdateParameters pagesUpdateParameters)
5571
{
5672
var url = PagesApiUrls.Update(pageId);
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using Newtonsoft.Json;
2+
3+
namespace Notion.Client
4+
{
5+
public interface IRetrievePropertyItemPathParameters
6+
{
7+
[JsonProperty("page_id")]
8+
string PageId { get; set; }
9+
10+
[JsonProperty("property_id")]
11+
string PropertyId { get; set; }
12+
}
13+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace Notion.Client
2+
{
3+
public interface IRetrievePropertyQueryParameters : IPaginationParameters
4+
{
5+
}
6+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
namespace Notion.Client
2+
{
3+
public class RetrievePropertyItemParameters : IRetrievePropertyItemPathParameters, IRetrievePropertyQueryParameters
4+
{
5+
public string PageId { get; set; }
6+
7+
public string PropertyId { get; set; }
8+
9+
public string StartCursor { get; set; }
10+
11+
public int? PageSize { get; set; }
12+
}
13+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using Newtonsoft.Json;
2+
3+
namespace Notion.Client
4+
{
5+
public class CheckboxPropertyItem : SimplePropertyItem
6+
{
7+
public override string Type => "checkbox";
8+
9+
[JsonProperty("checkbox")]
10+
public bool Checkbox { get; set; }
11+
}
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using Newtonsoft.Json;
2+
3+
namespace Notion.Client
4+
{
5+
public class CreatedByPropertyItem : SimplePropertyItem
6+
{
7+
public override string Type => "created_by";
8+
9+
[JsonProperty("created_by")]
10+
public User CreatedBy { get; set; }
11+
}
12+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System;
2+
using Newtonsoft.Json;
3+
4+
namespace Notion.Client
5+
{
6+
public class CreatedTimePropertyItem : SimplePropertyItem
7+
{
8+
public override string Type => "created_time";
9+
10+
[JsonProperty("created_time")]
11+
public DateTime CreatedTime { get; set; }
12+
}
13+
}

0 commit comments

Comments
 (0)