Add common HFF data models.
This commit is contained in:
parent
b5ac7e1a23
commit
53c2fcee0c
@ -1,6 +1,6 @@
|
||||
# Package
|
||||
|
||||
version = "0.1.0"
|
||||
version = "0.2.0"
|
||||
author = "Jonathan Bernard"
|
||||
description = "Utilities and bindings for the Notion API."
|
||||
license = "GPL-3.0-or-later"
|
||||
|
160
src/notion_utils/hff_models.nim
Normal file
160
src/notion_utils/hff_models.nim
Normal file
@ -0,0 +1,160 @@
|
||||
import std/json, std/options, std/tables, std/times
|
||||
|
||||
import timeutils
|
||||
|
||||
import ../notion_utils
|
||||
|
||||
type
|
||||
NAddressObj* = object
|
||||
id*: string
|
||||
city*: string
|
||||
state*: string
|
||||
street*: string
|
||||
zipCode*: string
|
||||
createdAt*: Option[DateTime]
|
||||
lastUpdatedAt*: Option[DateTime]
|
||||
|
||||
|
||||
NFamilyObj* = object
|
||||
id*: string
|
||||
name*: string
|
||||
headOfHouseholdIds*: seq[string]
|
||||
primaryAddressId*: seq[string]
|
||||
memberIds*: seq[string]
|
||||
createdAt*: Option[DateTime]
|
||||
lastUpdatedAt*: Option[DateTime]
|
||||
|
||||
NPersonObj* = object
|
||||
id*: string
|
||||
preferredName*: string
|
||||
firstName*: string
|
||||
middleNames*: string
|
||||
lastName*: string
|
||||
birthDate*: Option[DateTime]
|
||||
gender*: string
|
||||
primaryPhoneNumber*: string
|
||||
primaryEmailAddress*: string
|
||||
addressIds*: seq[string]
|
||||
marriedToId*: seq[string]
|
||||
anniversary*: Option[DateTime]
|
||||
parentIds*: seq[string]
|
||||
childIds*: seq[string]
|
||||
relationshipToHff*: seq[string]
|
||||
createdAt*: Option[DateTime]
|
||||
lastUpdatedAt*: Option[DateTime]
|
||||
|
||||
NAddress* = ref NAddressObj
|
||||
NFamily* = ref NFamilyObj
|
||||
NPerson* = ref NPersonObj
|
||||
|
||||
func sameContents[T](a: seq[T], b: seq[T]): bool =
|
||||
let aCount = toCountTable(a)
|
||||
let bCount = toCountTable(b)
|
||||
|
||||
for k in aCount.keys:
|
||||
if not bCount.hasKey(k) or aCount[k] != bCount[k]: return false
|
||||
|
||||
return aCount.len == bCount.len
|
||||
|
||||
|
||||
func `==`*(a, b: NFamily): bool =
|
||||
return a.name == b.name and
|
||||
sameContents(a.headOfHouseholdIds, b.headOfHouseholdIds) and
|
||||
sameContents(a.primaryAddressId, b.primaryAddressId) and
|
||||
sameContents(a.memberIds, b.memberIds)
|
||||
|
||||
func `==`*(a, b: NPerson): bool =
|
||||
return a.preferredName == b.preferredName and
|
||||
a.firstName == b.firstName and
|
||||
a.middleNames == b.middleNames and
|
||||
a.lastName == b.lastName and
|
||||
a.birthDate == b.birthDate and
|
||||
a.gender == b.gender and
|
||||
a.primaryPhoneNumber == b.primaryPhoneNumber and
|
||||
a.primaryEmailAddress == b.primaryEmailAddress and
|
||||
a.anniversary == b.anniversary 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)
|
||||
|
||||
func toPage*(a: NAddress): JsonNode =
|
||||
%*{
|
||||
"properties": {
|
||||
"City": makeTextProp("rich_text", a.city),
|
||||
"State": makeSelectProp(a.state),
|
||||
"Street Address": makeTextProp("title", a.street),
|
||||
"Zip Code": makeTextProp("rich_text", a.zipCode)
|
||||
}
|
||||
}
|
||||
|
||||
func toPage*(f: NFamily): JsonNode =
|
||||
%*{
|
||||
"properties": {
|
||||
"Name": makeTextProp("title", f.name),
|
||||
"Head(s) of Household": makeRelationProp(f.headOfHouseholdIds),
|
||||
"Primary Address": makeRelationProp(f.primaryAddressId),
|
||||
"Members": makeRelationProp(f.memberIds)
|
||||
}
|
||||
}
|
||||
|
||||
func toPage*(p: NPerson): JsonNode =
|
||||
%*{
|
||||
"properties": {
|
||||
"Preferred Name": makeTextProp("title", p.preferredName),
|
||||
"First Name": makeTextProp("rich_text", p.firstName),
|
||||
"Middle Names": makeTextProp("rich_text", p.middleNames),
|
||||
"Last Name": makeTextProp("rich_text", p.lastName),
|
||||
"Birth Date": makeDateProp(p.birthDate),
|
||||
"Gender": makeSelectProp(p.gender),
|
||||
"Primary Phone Number": { "phone_number": p.primaryPhoneNumber },
|
||||
"Email Address": { "email": p.primaryEmailAddress },
|
||||
"Relationship to HFF": makeMultiSelectProp(p.relationshipToHff),
|
||||
"Address": makeRelationProp(p.addressIds),
|
||||
"Married To": makeRelationProp(p.marriedToId),
|
||||
"Anniversary": makeDateProp(p.anniversary),
|
||||
"Parents": makeRelationProp(p.parentIds),
|
||||
"Children": makeRelationProp(p.childIds),
|
||||
}
|
||||
}
|
||||
|
||||
proc parseNAddress*(page: JsonNode): NAddress =
|
||||
result = NAddress(
|
||||
id: page["id"].getStr,
|
||||
city: page.getText("City"),
|
||||
state: page.getSelect("State"),
|
||||
street: page.getTitle("Street Address"),
|
||||
zipCode: page.getText("Zip Code"),
|
||||
createdAt: some(parseIso8601(page["created_time"].getStr)),
|
||||
lastUpdatedAt: some(parseIso8601(page["last_edited_time"].getStr)))
|
||||
|
||||
proc parseNFamily*(page: JsonNode): NFamily =
|
||||
result = NFamily(
|
||||
id: page["id"].getStr,
|
||||
name: page.getTitle("Name"),
|
||||
headOfHouseholdIds: page.getRelationIds("Head(s) of Household"),
|
||||
primaryAddressId: page.getRelationIds("Primary Address"),
|
||||
memberIds: page.getRelationIds("Members"),
|
||||
createdAt: some(parseIso8601(page["created_time"].getStr)),
|
||||
lastUpdatedAt: some(parseIso8601(page["last_edited_time"].getStr)))
|
||||
|
||||
proc parseNPerson*(page: JsonNode): NPerson =
|
||||
result = NPerson(
|
||||
id: page["id"].getStr,
|
||||
preferredName: page.getTitle("Preferred Name"),
|
||||
firstName: page.getText("First Name"),
|
||||
middleNames: page.getText("Middle Names"),
|
||||
lastName: page.getText("Last Name"),
|
||||
birthDate: page.getDateTime("Birth Date"),
|
||||
gender: page.getSelect("Gender"),
|
||||
primaryPhoneNumber: page.getPhone("Primary Phone Number"),
|
||||
primaryEmailAddress: page.getEmail("Email Address"),
|
||||
relationshipToHff: page.getMultiSelect("Relationship to HFF"),
|
||||
addressIds: page.getRelationIds("Address"),
|
||||
marriedToId: page.getRelationIds("Married To"),
|
||||
anniversary: page.getDateTime("Anniversary"),
|
||||
parentIds: page.getRelationIds("Parents"),
|
||||
childIds: page.getRelationIds("Children"),
|
||||
createdAt: some(parseIso8601(page["created_time"].getStr)),
|
||||
lastUpdatedAt: some(parseIso8601(page["last_edited_time"].getStr)))
|
Loading…
x
Reference in New Issue
Block a user