From 31e3a325ec07bbb5730358dc7e4ed6163a6bbb09 Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Fri, 29 Apr 2022 16:46:46 +0100 Subject: [PATCH] Add support for setting a ttl when sending JSON through the API (#31) --- app/jsonDoc.server.ts | 13 +++++++++++-- app/routes/api/create[.json].ts | 16 +++++++++++++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/app/jsonDoc.server.ts b/app/jsonDoc.server.ts index fa56cb3..813e5ff 100644 --- a/app/jsonDoc.server.ts +++ b/app/jsonDoc.server.ts @@ -15,6 +15,11 @@ export type UrlJsonDocument = BaseJsonDocument & { url: string; }; +export type CreateJsonOptions = { + ttl?: number; + metadata?: any; +}; + export type JSONDocument = RawJsonDocument | UrlJsonDocument; export async function createFromUrlOrRawJson( @@ -49,12 +54,16 @@ export async function createFromUrl( export async function createFromRawJson( filename: string, - contents: string + contents: string, + options?: CreateJsonOptions ): Promise { const docId = createId(); const doc = { id: docId, type: "raw", contents, title: filename }; - await DOCUMENTS.put(docId, JSON.stringify(doc)); + await DOCUMENTS.put(docId, JSON.stringify(doc), { + expirationTtl: options?.ttl ?? undefined, + metadata: options?.metadata ?? undefined, + }); return doc; } diff --git a/app/routes/api/create[.json].ts b/app/routes/api/create[.json].ts index 6ca191c..a0f592e 100644 --- a/app/routes/api/create[.json].ts +++ b/app/routes/api/create[.json].ts @@ -1,12 +1,12 @@ import { ActionFunction, json } from "remix"; import invariant from "tiny-invariant"; import { sendEvent } from "~/graphJSON.server"; -import { createFromRawJson } from "~/jsonDoc.server"; +import { createFromRawJson, CreateJsonOptions } from "~/jsonDoc.server"; export const action: ActionFunction = async ({ request, context }) => { const url = new URL(request.url); - const { title, content } = await request.json(); + const { title, content, ttl } = await request.json(); if (!title || !content) { return json({ message: "Missing title or content" }, 400); @@ -17,7 +17,17 @@ export const action: ActionFunction = async ({ request, context }) => { const source = url.searchParams.get("utm_source"); - const doc = await createFromRawJson(title, JSON.stringify(content)); + const options: CreateJsonOptions = {}; + + if (typeof ttl === "number") { + if (ttl < 60) { + return json({ message: "ttl must be at least 60 seconds" }, 400); + } + + options.ttl = ttl; + } + + const doc = await createFromRawJson(title, JSON.stringify(content), options); url.pathname = `/j/${doc.id}`; url.searchParams.delete("utm_source");