6 Commits
0.2.3 ... 0.3.0

14 changed files with 71 additions and 39 deletions

1
.gitignore vendored
View File

@ -25,3 +25,4 @@ pnpm-debug.log*
.*.sw?
api/hff_entry_forms_api
api/test/runner

View File

@ -6,8 +6,11 @@ build: dist/hff-entry-forms-api.tar.gz dist/hff-entry-forms-web.tar.gz
clean:
-rm -r dist
-rm -r web/dist
-docker container prune
-docker image prune
make -C api clean
make -C web clean
test:
(cd api && nimble unittest)
update-version:
operations/update-version.sh

View File

@ -69,6 +69,9 @@ serve-docker: build-image
# Utility
# -------
clean:
-docker image rm $(ECR_ACCOUNT_URL)/hff_entry_forms_api:$(VERSION)
# Authenticate docker to the AWS private elastic container repository.
ecr-auth:
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin $(ECR_ACCOUNT_URL)

View File

@ -1,6 +1,6 @@
# Package
version = "0.2.3"
version = "0.3.0"
author = "Jonathan Bernard"
description = "Hope Family Fellowship entry forms."
license = "GPL-3.0-or-later"
@ -15,7 +15,11 @@ requires @["docopt", "jester"]
requires "https://git.jdb-software.com/jdb/nim-cli-utils.git >= 0.6.3"
requires "https://git.jdb-software.com/jdb/nim-time-utils.git >= 0.5.0"
requires "https://git.jdb-software.com/jdb/update-nim-package-version"
requires "https://git.jdb-software.com/jdb/update-nim-package-version.git"
requires "https://git.jdb-software.com/hope-family-fellowship/notion_utils.git"
task updateVersion, "Update the version of this package.":
exec "update_nim_package_version hff_entry_forms_api 'src/hff_entry_forms_apipkg/version.nim'"
exec "update_nim_package_version hff_entry_forms_api 'src/hff_entry_forms_apipkg/version.nim'"
task unittest, "Runs the unit test suite.":
exec "nim c -r test/runner"

View File

@ -42,7 +42,7 @@ Usage:
Options:
-C, --config <cfgFile> Location of the config file to use (defaults to
-c, --config <cfgFile> Location of the config file to use (defaults to
hff_entry_forms_api.config.json)
-d, --debug Log debugging information.
@ -52,7 +52,8 @@ Options:
let consoleLogger = newConsoleLogger(
levelThreshold=lvlInfo,
fmtStr="$app - $levelname: ")
fmtStr="$appname - $levelname: ",
useStderr=true)
logging.addHandler(consoleLogger)
# Initialize our service context

View File

@ -1,4 +1,6 @@
import json, times, timeutils
import std/json, std/times
import notion_utils, timeutils
type
EventProposal* = object
@ -26,14 +28,6 @@ proc getOrFail(n: JsonNode, key: string): JsonNode =
proc parseIso8601(n: JsonNode, key: string): DateTime =
return parseIso8601(n.getOrFail(key).getStr)
proc textProp(value: string): JsonNode =
return %*[
{
"type": "text",
"text": { "content": value }
}
]
proc parseEventProposal*(n: JsonNode): EventProposal {.raises: [JsonParsingError].} =
try:
@ -52,33 +46,34 @@ proc parseEventProposal*(n: JsonNode): EventProposal {.raises: [JsonParsingError
proc asNotionPage*(ep: EventProposal): JsonNode =
result = %*{
"properties": {
"Event": { "title": textProp(ep.name) },
"Event": makeTextProp("title", ep.name),
"Date": { "date": { "start": formatIso8601(ep.date) } },
"Department": { "multi_select": [ { "name": ep.department } ] },
"Location": { "rich_text": textProp(ep.location) },
"Owner": { "rich_text": textProp(ep.owner) },
"State": { "select": { "name": "Proposed" } }
"Location": makeTextProp("rich_text", ep.location),
"Owner": makeTextProp("rich_text", ep.owner),
"State": { "select": { "name": "Proposed" } },
"Visibility": { "select": { "name": "Public" } }
},
"children": [
{
"object": "block",
"type": "heading_2",
"heading_2": { "text": textProp("Purpose") }
"heading_2": makeTextProp("text", "Purpose")
},
{
"object": "block",
"type": "paragraph",
"paragraph": { "text": textProp(ep.purpose) }
"paragraph": makeTextProp("text", ep.purpose)
},
{
"object": "block",
"type": "heading_2",
"heading_2": { "text": textProp("Description") }
"heading_2": makeTextProp("text", "Description")
},
{
"object": "block",
"type": "paragraph",
"paragraph": { "text": textProp(ep.description) }
"paragraph": makeTextProp("text", ep.description)
}
]
}

View File

@ -1,18 +1,12 @@
import json, logging, std/httpclient, sequtils, strutils
import std/json, std/logging, std/httpclient, std/sequtils, std/strutils
import notion_utils
import ./models, ./service
proc makeHttpClient(cfg: HffEntryFormsApiConfig): HttpClient =
let headers = newHttpHeaders([
("Content-Type", "application/json"),
("Authorization", "Bearer " & cfg.integrationToken),
("Notion-Version", cfg.notionVersion)
], true)
debug $headers
return newHttpClient(headers = headers, )
proc getEventProposalConfig*(cfg: HffEntryFormsApiConfig): EventProposalConfig =
let http = makeHttpClient(cfg)
let http = newNotionClient(
apiVersion = cfg.notionVersion,
integrationToken = cfg.integrationToken)
let apiResp = http.get(cfg.notionApiBaseUrl & "/databases/" & cfg.eventParentId)
debug apiResp.status
@ -37,7 +31,10 @@ proc getEventProposalConfig*(cfg: HffEntryFormsApiConfig): EventProposalConfig =
)
proc createProposedEvent*(cfg: HffEntryFormsApiConfig, ep: EventProposal): bool =
let http = makeHttpClient(cfg)
let http = newNotionClient(
apiVersion = cfg.notionVersion,
integrationToken = cfg.integrationToken)
let epNotionPage = ep.asNotionPage
epNotionPage["parent"] = %*{ "database_id": cfg.eventParentId }

View File

@ -1 +1 @@
const HFF_ENTRY_FORMS_API_VERSION* = "0.2.3"
const HFF_ENTRY_FORMS_API_VERSION* = "0.3.0"

2
api/test/config.nims Normal file
View File

@ -0,0 +1,2 @@
switch("path", "../src")
switch("verbosity", "0")

3
api/test/runner.nim Normal file
View File

@ -0,0 +1,3 @@
import std/unittest
import ./tmodels

20
api/test/tmodels.nim Normal file
View File

@ -0,0 +1,20 @@
import std/json, std/times, std/unittest
import hff_entry_forms_apipkg/models
suite "models":
test "asNotionPage(EventProposal)":
let ep = EventProposal(
name: "Test Event",
description: "A test event.",
purpose: "Event example for unit testing.",
department: "Testing",
location: "Hope Family Fellowship",
owner: "Jonathan Bernard",
date: parse("2021-10-30", "YYYY-MM-dd"),
budgetInDollars: 56)
let expectedJson = """{"properties":{"Event":{"title":[{"type":"text","text":{"content":"Test Event"}}]},"Date":{"date":{"start":"2021-10-30T00:00:00.000-05:00"}},"Department":{"multi_select":[{"name":"Testing"}]},"Location":{"rich_text":[{"type":"text","text":{"content":"Hope Family Fellowship"}}]},"Owner":{"rich_text":[{"type":"text","text":{"content":"Jonathan Bernard"}}]},"State":{"select":{"name":"Proposed"}},"Visibility":{"select":{"name":"Public"}}},"children":[{"object":"block","type":"heading_2","heading_2":{"text":[{"type":"text","text":{"content":"Purpose"}}]}},{"object":"block","type":"paragraph","paragraph":{"text":[{"type":"text","text":{"content":"Event example for unit testing."}}]}},{"object":"block","type":"heading_2","heading_2":{"text":[{"type":"text","text":{"content":"Description"}}]}},{"object":"block","type":"paragraph","paragraph":{"text":[{"type":"text","text":{"content":"A test event."}}]}}]}"""
check $(ep.asNotionPage) == expectedJson

View File

@ -3,3 +3,6 @@ build:
serve:
npm run serve
clean:
-rm -r dist

2
web/package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "hff-entry-form-web",
"version": "0.2.3",
"version": "0.3.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View File

@ -1,6 +1,6 @@
{
"name": "hff-entry-form-web",
"version": "0.2.3",
"version": "0.3.0",
"private": true,
"scripts": {
"serve": "npx servor dist",