Genesis
This commit is contained in:
46
src/db/client.js
Normal file
46
src/db/client.js
Normal file
@@ -0,0 +1,46 @@
|
||||
import Database from 'better-sqlite3';
|
||||
import { mkdirSync } from 'fs';
|
||||
import { dirname, resolve } from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import env from '../config/env.js';
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const defaultPath = resolve(__dirname, '../../data/dashback.db');
|
||||
|
||||
let db;
|
||||
|
||||
function getDbPath() {
|
||||
return env.sqlitePath || defaultPath;
|
||||
}
|
||||
|
||||
function initSchema(database) {
|
||||
database.exec(`
|
||||
CREATE TABLE IF NOT EXISTS google_auth (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
email TEXT NOT NULL UNIQUE COLLATE NOCASE,
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
)
|
||||
`);
|
||||
}
|
||||
|
||||
export function getDb() {
|
||||
if (!db) {
|
||||
const dbPath = getDbPath();
|
||||
mkdirSync(dirname(dbPath), { recursive: true });
|
||||
db = new Database(dbPath);
|
||||
db.pragma('journal_mode = WAL');
|
||||
initSchema(db);
|
||||
}
|
||||
return db;
|
||||
}
|
||||
|
||||
export function ensureConnection() {
|
||||
getDb().prepare('SELECT 1').get();
|
||||
}
|
||||
|
||||
export function closeDb() {
|
||||
if (db) {
|
||||
db.close();
|
||||
db = undefined;
|
||||
}
|
||||
}
|
||||
34
src/db/googleAuth.js
Normal file
34
src/db/googleAuth.js
Normal file
@@ -0,0 +1,34 @@
|
||||
import { getDb } from './client.js';
|
||||
|
||||
export function listAllowedEmails() {
|
||||
return getDb()
|
||||
.prepare('SELECT id, email, created_at FROM google_auth ORDER BY email COLLATE NOCASE')
|
||||
.all();
|
||||
}
|
||||
|
||||
export function getAllowedEmail(email) {
|
||||
return getDb()
|
||||
.prepare('SELECT id, email, created_at FROM google_auth WHERE email = ? COLLATE NOCASE')
|
||||
.get(email);
|
||||
}
|
||||
|
||||
export function getAllowedEmailById(id) {
|
||||
return getDb()
|
||||
.prepare('SELECT id, email, created_at FROM google_auth WHERE id = ?')
|
||||
.get(id);
|
||||
}
|
||||
|
||||
export function addAllowedEmail(email) {
|
||||
const normalized = email.trim().toLowerCase();
|
||||
const result = getDb()
|
||||
.prepare('INSERT INTO google_auth (email) VALUES (?)')
|
||||
.run(normalized);
|
||||
return getAllowedEmailById(result.lastInsertRowid);
|
||||
}
|
||||
|
||||
export function removeAllowedEmail(email) {
|
||||
const normalized = email.trim().toLowerCase();
|
||||
return getDb()
|
||||
.prepare('DELETE FROM google_auth WHERE email = ? COLLATE NOCASE')
|
||||
.run(normalized).changes > 0;
|
||||
}
|
||||
Reference in New Issue
Block a user