From 5b35bac6ffc00848ae7fe016bee096afcc04c98c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hampus=20Sj=C3=B6berg?= Date: Tue, 27 Apr 2021 19:46:25 +0200 Subject: [PATCH] Page views tracking --- .gitignore | 1 + index.ts | 3 +++ pageviews/index.ts | 24 ++++++++++++++++++++++++ run-server.sh | 2 +- 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 pageviews/index.ts diff --git a/.gitignore b/.gitignore index 981b050..7a510cf 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ dist config/config.ts +pageviews.json diff --git a/index.ts b/index.ts index 42b9933..94f77c4 100644 --- a/index.ts +++ b/index.ts @@ -3,11 +3,14 @@ import { Application, send } from "https://deno.land/x/oak@v7.3.0/mod.ts"; import config from "./config/config.ts"; import router from "./api.ts"; import { bootstrapBlocks } from "./blocks.ts"; +import Pageviews from "./pageviews/index.ts"; await bootstrapBlocks(); const app = new Application(); +app.use(Pageviews); + app.use(router.routes()); app.use(async (context) => { diff --git a/pageviews/index.ts b/pageviews/index.ts new file mode 100644 index 0000000..b3de2b8 --- /dev/null +++ b/pageviews/index.ts @@ -0,0 +1,24 @@ +import { Middleware } from "https://deno.land/x/oak@v7.3.0/mod.ts"; +import { ensureFile } from "https://deno.land/std/fs/mod.ts"; +import format from "https://deno.land/x/date_fns@v2.15.0/format/index.js"; + +await ensureFile("./pageviews.json"); +interface IPageViews { + [key: string]: number; +} +const pageViews: IPageViews = JSON.parse((await Deno.readTextFile("./pageviews.json")) || "{}"); + +const PageviewsMiddleware: Middleware = async function (_, next) { + try { + const date = format(new Date(), "yyyy-MM-dd", {}); + pageViews[date] = pageViews[date] ?? 0; + pageViews[date] = pageViews[date] + 1; + await Deno.writeTextFile("./pageviews.json", JSON.stringify(pageViews, null, 2)); + } catch (e) { + console.log(e.message); + } + + await next(); +}; + +export default PageviewsMiddleware; diff --git a/run-server.sh b/run-server.sh index 3a5cdfd..7d420d7 100755 --- a/run-server.sh +++ b/run-server.sh @@ -6,4 +6,4 @@ mkdir frontend/dist deno run -A https://deno.land/x/aleph@v0.3.0-alpha.32/cli.ts build frontend --reload # Run backend -deno run --allow-net --allow-read index.ts +deno run --unstable --allow-net --allow-read --allow-write index.ts