advancedmqttbridge/own_modules/sqliteManager.mjs

74 lines
2.9 KiB
JavaScript

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) => {
this.database = db
this.ready = true
console.log('[SQLITE] Connected to the loginbase database.');
}
)
await this.database.run("CREATE TABLE IF NOT EXISTS users (email TEXT PRIMARY KEY, password TEXT)");
console.log('[SQLITE] Created users table if it didnt exist.');
await this.database.run("CREATE TABLE IF NOT EXISTS handlers (topic TEXT, message TEXT, requestUrl TEXT)");
console.log('[SQLITE] Created handlers table if it didnt exist.');
}
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
}
}