--- /dev/null
+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
+ }
+ }
+ )
+}