In /lib/navbar.jst rework feedback to be similar to /contact/index.html.jst way
[ndcode_site.git] / api / feedback / set_draft.json.jst
diff --git a/api/feedback/set_draft.json.jst b/api/feedback/set_draft.json.jst
new file mode 100644 (file)
index 0000000..546a473
--- /dev/null
@@ -0,0 +1,46 @@
+let jst_server = (await import('@ndcode/jst_server')).default
+let XDate = require('xdate')
+
+return async env => {
+  let post_request = await _require('/_lib/post_request.jst')
+  let get_session = await _require('/_lib/get_session.jst')
+
+  await post_request(
+    // env
+    env,
+    // handler
+    async details => {
+      // coerce and/or validate
+      if (details !== null)
+        details = {
+          message: details.message.slice(0, 65536)
+        }
+
+      let transaction = await env.site.database.Transaction()
+      try {
+        let root = await transaction.get({})
+        let session = await get_session(env, root)
+
+        if (details) {
+          let expires = new XDate()
+          expires.addDays(1)
+          session.set_json(
+            'feedback_draft',
+            {
+              message: details.message,
+              expires: expires.getTime()
+            }
+          )
+        }
+        else
+          session.delete('feedback_draft')
+
+        await transaction.commit()
+      }
+      catch (error) {
+        transaction.rollback()
+        throw error
+      }
+    }
+  )
+}