Nice Work
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
import { ensureSchema } from './index.js';
|
||||
|
||||
ensureSchema()
|
||||
.then(() => {
|
||||
console.log('✅ Datenbankschema abgeglichen.');
|
||||
process.exit(0);
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('⚠️ Schema-Abgleich fehlgeschlagen:', error);
|
||||
process.exit(1);
|
||||
});
|
||||
@@ -0,0 +1,62 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import sqlite3 from 'sqlite3';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
const dbPath = path.join(__dirname, 'klangkiste.sqlite');
|
||||
const schemaPath = path.join(__dirname, 'schema.sql');
|
||||
|
||||
export const db = new sqlite3.Database(dbPath);
|
||||
|
||||
db.exec('PRAGMA foreign_keys = ON;');
|
||||
|
||||
export function run(query, params = []) {
|
||||
return new Promise((resolve, reject) => {
|
||||
db.run(query, params, function onRun(error) {
|
||||
if (error) {
|
||||
reject(error);
|
||||
return;
|
||||
}
|
||||
resolve({ changes: this.changes, lastID: this.lastID });
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export function get(query, params = []) {
|
||||
return new Promise((resolve, reject) => {
|
||||
db.get(query, params, (error, row) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
return;
|
||||
}
|
||||
resolve(row || null);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export function all(query, params = []) {
|
||||
return new Promise((resolve, reject) => {
|
||||
db.all(query, params, (error, rows) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
return;
|
||||
}
|
||||
resolve(rows || []);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export async function ensureSchema() {
|
||||
const schema = fs.readFileSync(schemaPath, 'utf-8');
|
||||
return new Promise((resolve, reject) => {
|
||||
db.exec(schema, (error) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
return;
|
||||
}
|
||||
resolve(true);
|
||||
});
|
||||
});
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,65 @@
|
||||
PRAGMA journal_mode = WAL;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS boxes (
|
||||
box_id TEXT PRIMARY KEY,
|
||||
fingerprint TEXT NOT NULL,
|
||||
state TEXT NOT NULL,
|
||||
first_seen INTEGER NOT NULL,
|
||||
last_seen INTEGER NOT NULL,
|
||||
firmware_version TEXT NOT NULL,
|
||||
capabilities_json TEXT NOT NULL,
|
||||
api_token TEXT,
|
||||
last_ip TEXT,
|
||||
api_port INTEGER,
|
||||
setup_port INTEGER,
|
||||
alias TEXT,
|
||||
media_root TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tags (
|
||||
uid TEXT PRIMARY KEY,
|
||||
label TEXT,
|
||||
alias TEXT,
|
||||
status TEXT NOT NULL,
|
||||
created_at INTEGER NOT NULL,
|
||||
written_at INTEGER,
|
||||
media_path TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS box_tags (
|
||||
box_id TEXT NOT NULL,
|
||||
tag_uid TEXT NOT NULL,
|
||||
media_path TEXT NOT NULL,
|
||||
created_at INTEGER NOT NULL,
|
||||
PRIMARY KEY (box_id, tag_uid),
|
||||
FOREIGN KEY (box_id) REFERENCES boxes(box_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (tag_uid) REFERENCES tags(uid) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS box_tag_blocks (
|
||||
box_id TEXT NOT NULL,
|
||||
tag_uid TEXT NOT NULL,
|
||||
created_at INTEGER NOT NULL,
|
||||
PRIMARY KEY (box_id, tag_uid),
|
||||
FOREIGN KEY (box_id) REFERENCES boxes(box_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (tag_uid) REFERENCES tags(uid) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS settings (
|
||||
key TEXT PRIMARY KEY,
|
||||
value TEXT,
|
||||
updated_at INTEGER NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS box_jobs (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
box_id TEXT NOT NULL,
|
||||
job_type TEXT NOT NULL,
|
||||
payload_json TEXT NOT NULL,
|
||||
status TEXT NOT NULL,
|
||||
attempts INTEGER NOT NULL,
|
||||
last_error TEXT,
|
||||
created_at INTEGER NOT NULL,
|
||||
updated_at INTEGER NOT NULL,
|
||||
FOREIGN KEY (box_id) REFERENCES boxes(box_id) ON DELETE CASCADE
|
||||
);
|
||||
Reference in New Issue
Block a user