Add fields for display values of linked records.

This commit is contained in:
Jonathan Bernard 2022-04-18 18:35:05 -05:00
parent b6f63cf15b
commit be482dfe41
3 changed files with 22 additions and 6 deletions

View File

@ -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"

View File

@ -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)),

View File

@ -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 ""