From 3164fc3efa1115b36b68f55edce3395cecb85149 Mon Sep 17 00:00:00 2001 From: Owen Buckley Date: Sun, 23 Oct 2022 16:00:55 -0400 Subject: [PATCH 1/3] support for modeling tags --- src/http/get-events/index.mjs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/http/get-events/index.mjs b/src/http/get-events/index.mjs index 74d7859..713d084 100644 --- a/src/http/get-events/index.mjs +++ b/src/http/get-events/index.mjs @@ -19,6 +19,7 @@ export async function handler (req) { let events = (await client.getEntries('Event')) .items.map((event) => { const { id, description, endTime, startTime, title } = event.fields; + const { tags = [] } = event.metadata; return { id, @@ -31,7 +32,10 @@ export async function handler (req) { } }), startTime: new Date(startTime).getTime() / 1000, - endTime: new Date(endTime).getTime() / 1000 + endTime: new Date(endTime).getTime() / 1000, + tags: tags.map((tag) => { + return tag.sys.id + }) }; }); From 20d62c889c9e70b54af773f453c3a520a83705e3 Mon Sep 17 00:00:00 2001 From: Owen Buckley Date: Sun, 23 Oct 2022 16:07:23 -0400 Subject: [PATCH 2/3] add query params filtering option --- src/http/get-events/index.mjs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/http/get-events/index.mjs b/src/http/get-events/index.mjs index 713d084..7a7037b 100644 --- a/src/http/get-events/index.mjs +++ b/src/http/get-events/index.mjs @@ -14,7 +14,8 @@ const client = contentful.createClient({ // learn more about HTTP functions here: https://arc.codes/http export async function handler (req) { - const { queryStringParameters } = req; + const { queryStringParameters = {} } = req; + const { id, tag } = queryStringParameters; let events = (await client.getEntries('Event')) .items.map((event) => { @@ -34,13 +35,17 @@ export async function handler (req) { startTime: new Date(startTime).getTime() / 1000, endTime: new Date(endTime).getTime() / 1000, tags: tags.map((tag) => { - return tag.sys.id + return tag.sys.id; }) }; }); - if (queryStringParameters && queryStringParameters.id) { - events = events.filter(event => parseInt(event.id, 10) === parseInt(queryStringParameters.id, 10)); + if (queryStringParameters) { + if (id) { + events = events.filter(event => parseInt(event.id, 10) === parseInt(queryStringParameters.id, 10)); + } else if (tag) { + events = events.filter(event => event.tags.includes(tag)); + } } return { From f7c8034b4d3cd532c8305948c254f2af65369f95 Mon Sep 17 00:00:00 2001 From: Owen Buckley Date: Sun, 23 Oct 2022 16:07:32 -0400 Subject: [PATCH 3/3] document events API --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 84da895..2024459 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,15 @@ ## Overview Serverless APIs for [www.analogstudios.net](https://github.com/AnalogStudiosRI/www.analogstudios.net) using [arc.codes](https://arc.codes/). -### Supported APIs -* `events` - Structured events content sourced from [**Contentful**](https://contentful.com/) +## Supported APIs +### `events` +Structured events content sourced from [**Contentful**](https://contentful.com/) around the **Event** content type. + +_Options:_ +- `?id=n` - Filter by the ID of the event +- `?tag=xxx` - Filter by tags of the event + +> _You can only pass one or the other_ ## Setup