From be482dfe41898dd52b12f12ba2b902bf9931e67a Mon Sep 17 00:00:00 2001 From: Jonathan Bernard Date: Mon, 18 Apr 2022 18:35:05 -0500 Subject: [PATCH] Add fields for display values of linked records. --- hff_notion_api_client.nimble | 2 +- src/hff_notion_api_client/models.nim | 20 ++++++++++++++++---- src/hff_notion_api_client/utils.nim | 6 +++++- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/hff_notion_api_client.nimble b/hff_notion_api_client.nimble index 84be14e..bb133bb 100644 --- a/hff_notion_api_client.nimble +++ b/hff_notion_api_client.nimble @@ -1,6 +1,6 @@ # Package -version = "0.3.2" +version = "0.4.0" author = "Jonathan Bernard" description = "Utilities and bindings for HFF's Notion API." license = "GPL-3.0-or-later" diff --git a/src/hff_notion_api_client/models.nim b/src/hff_notion_api_client/models.nim index 7aaa7f9..d47f9a9 100644 --- a/src/hff_notion_api_client/models.nim +++ b/src/hff_notion_api_client/models.nim @@ -19,8 +19,10 @@ type FamilyObj* = object id*: string name*: string + headsOfHousehold*: seq[string] headOfHouseholdIds*: seq[string] primaryAddressId*: seq[string] + members*: seq[string] memberIds*: seq[string] createdAt*: Option[DateTime] lastUpdatedAt*: Option[DateTime] @@ -35,10 +37,14 @@ type gender*: string primaryPhoneNumber*: string primaryEmailAddress*: string + addresses*: seq[string] addressIds*: seq[string] - marriedToId*: seq[string] + marriedTo*: string + marriedToId*: string anniversary*: Option[DateTime] + parents*: seq[string] parentIds*: seq[string] + children*: seq[string] childIds*: seq[string] relationshipToHff*: seq[string] createdAt*: Option[DateTime] @@ -91,8 +97,8 @@ func `==`*(a, b: Person): bool = a.primaryPhoneNumber == b.primaryPhoneNumber and a.primaryEmailAddress == b.primaryEmailAddress and a.anniversary == b.anniversary and + a.marriedToId == b.marriedToId and sameContents(a.addressIds, b.addressIds) and - sameContents(a.marriedToId, b.marriedToId) and sameContents(a.parentIds, b.parentIds) and sameContents(a.childIds, b.childIds) and sameContents(a.relationshipToHff, b.relationshipToHff) @@ -147,7 +153,7 @@ func toPage*(p: Person): JsonNode = "Email Address": { "email": p.primaryEmailAddress }, "Relationship to HFF": makeMultiSelectProp(p.relationshipToHff), "Address": makeRelationProp(p.addressIds), - "Married To": makeRelationProp(p.marriedToId), + "Married To": makeRelationProp(@[p.marriedToId]), "Anniversary": makeDateProp(p.anniversary), "Parents": makeRelationProp(p.parentIds), "Children": makeRelationProp(p.childIds), @@ -183,8 +189,10 @@ proc familyFromPage*(page: JsonNode): Family = result = Family( id: page["id"].getStr, name: page.getTitle("Name"), + headsOfHousehold: page.getRolledupDisplayValues("Head(s) of Household (display)"), headOfHouseholdIds: page.getRelationIds("Head(s) of Household"), primaryAddressId: page.getRelationIds("Primary Address"), + members: page.getRolledupDisplayValues("Members (display)"), memberIds: page.getRelationIds("Members"), createdAt: some(parseIso8601(page["created_time"].getStr)), lastUpdatedAt: some(parseIso8601(page["last_edited_time"].getStr))) @@ -201,10 +209,14 @@ proc personFromPage*(page: JsonNode): Person = primaryPhoneNumber: page.getPhone("Primary Phone Number"), primaryEmailAddress: page.getEmail("Email Address"), relationshipToHff: page.getMultiSelect("Relationship to HFF"), + addresses: page.getRolledupDisplayValues("Full Address"), addressIds: page.getRelationIds("Address"), - marriedToId: page.getRelationIds("Married To"), + marriedTo: page.getRolledupDisplayValues("Married To (display)")[0], + marriedToId: page.getRelationIds("Married To")[0], anniversary: page.getDateTime("Anniversary"), + parents: page.getRolledupDisplayValues("Parents (display)"), parentIds: page.getRelationIds("Parents"), + children: page.getRolledupDisplayValues("Children (display)"), childIds: page.getRelationIds("Children"), createdAt: some(parseIso8601(page["created_time"].getStr)), lastUpdatedAt: some(parseIso8601(page["last_edited_time"].getStr)), diff --git a/src/hff_notion_api_client/utils.nim b/src/hff_notion_api_client/utils.nim index 4546576..dfdfaf0 100644 --- a/src/hff_notion_api_client/utils.nim +++ b/src/hff_notion_api_client/utils.nim @@ -50,7 +50,7 @@ proc makeTextProp*(propType: string, value: string): JsonNode = ## Utility functions for reading Page property values ## -------------------------------------------------- -proc getPropNode(page: JsonNode, propType, propName: string): JsonNode = +proc getPropNode*(page: JsonNode, propType, propName: string): JsonNode = result = page{"properties", propName, propType} if isNil(result): @@ -74,6 +74,10 @@ proc getRelationIds*(page: JsonNode, propName: string): seq[string] = let propNode = page.getPropNode("relation", propName) return propNode.getElems.mapIt(it["id"].getStr) +proc getRolledupDisplayValues*(page: JsonNode, propName: string): seq[string] = + let propNode = page.getPropNode("rollup", propName) + return propNode.getElems.mapIt(it{"formula", "string"}.getStr) + proc getText*(page: JsonNode, propName: string): string = let propNode = page.getPropNode("rich_text", propName) if propNode.len == 0: return ""