|
1 | 1 | import { page, type PageResponse } from "fresh"; |
2 | 2 | import { define } from "../utils.ts"; |
3 | 3 | import { getCookies, setCookie } from "@std/http/cookie"; |
| 4 | +import { db } from "../utils/db.ts"; |
4 | 5 |
|
5 | | -const db = await Deno.openKv(); |
6 | | - |
7 | | -const key = ["clicks", "insecure"]; |
| 6 | +export const key = ["clicks", "insecure"]; |
8 | 7 |
|
9 | 8 | export const handler = define.handlers({ |
10 | 9 | GET: async (ctx): Promise<PageResponse<{ clicks: number }>> => { |
11 | 10 | const cookie = getCookies(ctx.req.headers)["Clicked-Insecure"]; |
12 | 11 |
|
13 | | - let clicksRes; |
14 | | - |
15 | | - try { |
16 | | - clicksRes = await db.get<number>(key); |
17 | | - } catch { |
18 | | - await db.atomic().set(key, 0).commit(); |
19 | | - clicksRes = await db.get<number>(key); |
20 | | - } |
| 12 | + const clicksRes = await db.get<number>(key).catch(() => undefined); |
21 | 13 |
|
22 | 14 | if (cookie === undefined) { |
23 | | - await db.atomic().check(clicksRes).set( |
24 | | - key, |
25 | | - clicksRes.value! + 1, |
26 | | - ).commit(); |
| 15 | + if (clicksRes !== undefined) { |
| 16 | + await db.atomic().check(clicksRes).set( |
| 17 | + key, |
| 18 | + clicksRes.value! + 1, |
| 19 | + ).commit(); |
| 20 | + } else { |
| 21 | + await db.set(key, 1); |
| 22 | + } |
27 | 23 | } |
28 | | - |
29 | 24 | const headers = new Headers(); |
30 | 25 |
|
31 | 26 | if (ctx.config.mode === "production") { |
32 | 27 | setCookie(headers, { |
33 | 28 | name: "Clicked-Insecure", |
34 | 29 | value: "true", |
35 | | - path: "/", |
| 30 | + path: "/insecure/", |
36 | 31 | }); |
37 | 32 | } |
38 | 33 |
|
39 | 34 | return page({ |
40 | | - clicks: cookie === undefined ? clicksRes.value! + 1 : clicksRes.value!, |
41 | | - }, { |
42 | | - headers, |
43 | | - }); |
| 35 | + clicks: clicksRes === undefined |
| 36 | + ? 0 |
| 37 | + : cookie === undefined |
| 38 | + ? clicksRes.value! + 1 |
| 39 | + : clicksRes.value!, |
| 40 | + }, { headers }); |
44 | 41 | }, |
45 | 42 | }); |
46 | 43 |
|
|
0 commit comments