diff --git a/data/consent.db b/data/consent.db new file mode 100644 index 0000000..b397c0f Binary files /dev/null and b/data/consent.db differ diff --git a/src/pages/api/consent/[sessionId].ts b/src/pages/api/consent/[sessionId].ts index efd15b9..1e3d861 100644 --- a/src/pages/api/consent/[sessionId].ts +++ b/src/pages/api/consent/[sessionId].ts @@ -1,13 +1,32 @@ import type { APIRoute } from 'astro'; import Database from 'better-sqlite3'; import { join } from 'path'; +import { mkdirSync, existsSync } from 'fs'; export const prerender = false; -const DB_PATH = join(process.cwd(), 'data', 'consent.db'); +const DATA_DIR = join(process.cwd(), 'data'); +const DB_PATH = join(DATA_DIR, 'consent.db'); function getDb() { - return new Database(DB_PATH); + if (!existsSync(DATA_DIR)) { + mkdirSync(DATA_DIR, { recursive: true }); + } + const db = new Database(DB_PATH); + db.exec(` + CREATE TABLE IF NOT EXISTS ConsentLog ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + sessionId TEXT UNIQUE NOT NULL, + timestamp TEXT NOT NULL, + essential INTEGER NOT NULL DEFAULT 0, + analytics INTEGER NOT NULL DEFAULT 0, + marketing INTEGER NOT NULL DEFAULT 0, + policyVersion TEXT NOT NULL, + ipHash TEXT, + userAgent TEXT + ) + `); + return db; } export const DELETE: APIRoute = async ({ params }) => { diff --git a/src/pages/api/consent/index.ts b/src/pages/api/consent/index.ts index e1705b8..bab75b0 100644 --- a/src/pages/api/consent/index.ts +++ b/src/pages/api/consent/index.ts @@ -1,13 +1,32 @@ import type { APIRoute } from 'astro'; import Database from 'better-sqlite3'; import { join } from 'path'; +import { mkdirSync, existsSync } from 'fs'; export const prerender = false; -const DB_PATH = join(process.cwd(), 'data', 'consent.db'); +const DATA_DIR = join(process.cwd(), 'data'); +const DB_PATH = join(DATA_DIR, 'consent.db'); function getDb() { - return new Database(DB_PATH); + if (!existsSync(DATA_DIR)) { + mkdirSync(DATA_DIR, { recursive: true }); + } + const db = new Database(DB_PATH); + db.exec(` + CREATE TABLE IF NOT EXISTS ConsentLog ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + sessionId TEXT UNIQUE NOT NULL, + timestamp TEXT NOT NULL, + essential INTEGER NOT NULL DEFAULT 0, + analytics INTEGER NOT NULL DEFAULT 0, + marketing INTEGER NOT NULL DEFAULT 0, + policyVersion TEXT NOT NULL, + ipHash TEXT, + userAgent TEXT + ) + `); + return db; } const rateLimitMap = new Map();