diff --git a/api/db/init.sql b/api/db/init.sql index a4eeb74..27a2f36 100644 --- a/api/db/init.sql +++ b/api/db/init.sql @@ -18,3 +18,16 @@ CREATE TABLE IF NOT EXISTS qr_codes ( design_data JSONB, -- Custom styling created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP ); + +CREATE TABLE IF NOT EXISTS qr_scans ( + id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), + qr_code_id UUID REFERENCES qr_codes(id) ON DELETE CASCADE, + ip_address VARCHAR(45), + user_agent TEXT, + os VARCHAR(50), + device_type VARCHAR(50), + browser VARCHAR(50), + country VARCHAR(100), + city VARCHAR(100), + scanned_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP +); diff --git a/api/server.js b/api/server.js index 1f2e316..3046675 100644 --- a/api/server.js +++ b/api/server.js @@ -113,6 +113,19 @@ app.get('/health', healthCheck); // Auto-migrate schema pgPool.query(`ALTER TABLE qr_codes ADD COLUMN IF NOT EXISTS name VARCHAR(255);`).catch(console.error); +pgPool.query(` +CREATE TABLE IF NOT EXISTS qr_scans ( + id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), + qr_code_id UUID REFERENCES qr_codes(id) ON DELETE CASCADE, + ip_address VARCHAR(45), + user_agent TEXT, + os VARCHAR(50), + device_type VARCHAR(50), + browser VARCHAR(50), + country VARCHAR(100), + city VARCHAR(100), + scanned_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP +);`).catch(console.error); app.listen(port, () => { console.log(`CK-QR API listening on port ${port}`);