Major refactoring of get_session(), get_account(), get_nodemailer(), introduces ...
[ndcode_site.git] / _lib / page.jst
index 1599f30..18e5cc2 100644 (file)
@@ -8,27 +8,31 @@ return async (env, head, body, scripts) => {
 
   // initialize env.session_key, set cookie in env.response
   let transaction = await env.site.database.Transaction()
-  let session = await get_session(env, transaction)
+  try {
+    let root = await transaction.get({})
+    let session = await get_session(env, root)
 
-  let pageview = await (
-    await (
-      await transaction.get({})
-    ).get('pageviews', {})
-  ).get(env.parsed_url.pathname, {})
-  pageview.set('visits', (await pageview.get('visits') || 0) + 1)
+    let pageviews = await root.get('pageviews', {})
+    let pageview = await pageviews.get(env.parsed_url.pathname, {})
+    pageview.set('visits', (await pageview.get('visits') || 0) + 1)
 
-  let session_pageviews = await session.get('pageviews', {})
-  let i = await session_pageviews.get(env.parsed_url.pathname)
-  if (i === undefined) {
-    pageview.set(
-      'unique_visits',
-      (await pageview.get('unique_visits') || 0) + 1
-    )
-    i = 0
-  }
-  session_pageviews.set(env.parsed_url.pathname, i + 1)
+    let session_pageviews = await session.get('pageviews', {})
+    let i = await session_pageviews.get(env.parsed_url.pathname)
+    if (i === undefined) {
+      pageview.set(
+        'unique_visits',
+        (await pageview.get('unique_visits') || 0) + 1
+      )
+      i = 0
+    }
+    session_pageviews.set(env.parsed_url.pathname, i + 1)
 
-  await transaction.commit()
+    await transaction.commit()
+  }
+  catch (error) {
+    transaction.rollback()
+    throw error
+  }
 
   let _out = []
   _out.push('<!doctype html>')