import sqlite3 from'sqlite3' import { open } from 'sqlite' /** * Manager for handling the sqlite database */ export default class SqliteManager{ constructor(){} async init(){ sqlite3.verbose() await open({filename: './database/loginbase.db', driver: sqlite3.Database}).then( (db) => { console.log('[SQLITE] Connected to the loginbase database.'); db.run("CREATE TABLE IF NOT EXISTS users (email TEXT PRIMARY KEY, password TEXT)"); console.log('[SQLITE] Created users table if it didnt exist.'); db.run("CREATE TABLE IF NOT EXISTS handlers (topic TEXT, message TEXT, requestUrl TEXT)"); console.log('[SQLITE] Created handlers table if it didnt exist.'); this.database = db this.ready = true }) } async getUser(email){ const result = await this.database.get('SELECT * FROM users WHERE email = ?', email) console.log('[SQLITE] Got user from database ['+JSON.stringify(result.email)+'].') return result } async addUser(email, password){ try{ await this.database.run(`INSERT INTO users(email, password) VALUES(:email, :password)`, {':email': email, ':password':password}); console.log("[SQLITE] Inserted new user("+email+").") return true }catch(err){ console.log("[SQLITE] Failed inserting new user("+email+"): "+err) return false } } async getHandlers(){ const result = await this.database.all('SELECT * FROM handlers') console.log('[SQLITE] Got handlers from database ['+JSON.stringify(result)+'].') return result } async addHandler(topic, message, requestUrl){ try{ await this.database.run(`INSERT INTO handlers(topic, message, requestUrl) VALUES(:topic, :message, :requestUrl)`, {':topic': topic, ':message':message, ':requestUrl': requestUrl}); console.log("[SQLITE] Inserted new handler [topic: "+topic+", message: "+message+", requestUrl: "+requestUrl+"].") return true }catch(err){ console.log("[SQLITE] Failed inserting new handler [topic: "+topic+", message: "+message+", requestUrl: "+requestUrl+"].") return false } } async removeHandler(topic, message, requestUrl){ const result = await this.database.run('DELETE FROM handlers WHERE topic = :topic AND message = :message AND requestUrl = :requestUrl', {':topic': topic, ':message': message, ':requestUrl': requestUrl}) if(result.changes>=1){ console.log("[SQLITE] Deleted message handler [topic: "+topic+", message: "+message+", requestUrl: "+requestUrl+"].") }else{ console.log("[SQLITE] Failed deleting message handler [topic: "+topic+", message: "+message+", requestUrl: "+requestUrl+"].") } return result } }