From d9175c1fc2012f4ecbd6824b56b4e4a04438a773 Mon Sep 17 00:00:00 2001 From: mrfry Date: Sun, 20 Mar 2022 17:32:25 +0100 Subject: [PATCH] Even more type fixes --- src/modules/api/submodules/userManagement.ts | 9 +- src/utils/dbtools.ts | 129 +++++++++++++------ 2 files changed, 96 insertions(+), 42 deletions(-) diff --git a/src/modules/api/submodules/userManagement.ts b/src/modules/api/submodules/userManagement.ts index f4db438..1aa91f8 100644 --- a/src/modules/api/submodules/userManagement.ts +++ b/src/modules/api/submodules/userManagement.ts @@ -3,7 +3,12 @@ import type { Database } from 'better-sqlite3' import logger from '../../../utils/logger' import utils from '../../../utils/utils' -import { Request, SubmoduleData, User } from '../../../types/basicTypes' +import { + Request, + SubmoduleData, + User, + Submodule, +} from '../../../types/basicTypes' import dbtools from '../../../utils/dbtools' const minimumAlowwedSessions = 2 // how many sessions are allowed for a user @@ -38,7 +43,7 @@ function BackupDB(usersDbBackupPath: string, userDB: Database) { }) } -function setup(data: SubmoduleData): any { +function setup(data: SubmoduleData): Submodule { const { app, userDB, url /* publicdirs, moduleSpecificData */ } = data let domain: any = url.split('.') // [ "https://api", "frylabs", "net" ] domain.shift() // [ "frylabs", "net" ] diff --git a/src/utils/dbtools.ts b/src/utils/dbtools.ts index 1bc38c5..f106351 100644 --- a/src/utils/dbtools.ts +++ b/src/utils/dbtools.ts @@ -15,14 +15,18 @@ export default { runStatement: runStatement, } -import Sqlite, { Database } from 'better-sqlite3' +import Sqlite, { Database, RunResult } from 'better-sqlite3' import logger from '../utils/logger' import utils from '../utils/utils' const debugLog = process.env.NS_SQL_DEBUG_LOG -// { asd: 'asd', basd: 4 } => asd = 'asd', basd = 4 -function GetSqlQuerry(conditions: any, type: string, joiner?: string) { +// { asd: 'asd', basd: 4 } => "asd = 'asd', basd = 4" +function GetSqlQuerry( + conditions: { [key: string]: string | number }, + type?: string, + joiner?: string +) { const res = Object.keys(conditions).reduce((acc, key) => { const item = conditions[key] if (typeof item === 'string') { @@ -45,7 +49,7 @@ function GetSqlQuerry(conditions: any, type: string, joiner?: string) { // ------------------------------------------------------------------------- -function GetDB(path: string): any { +function GetDB(path: string): Database { utils.CreatePath(path) const res = new Sqlite(path) res.pragma('synchronous = OFF') @@ -58,7 +62,12 @@ function DebugLog(msg: string) { } } -function AddColumn(db: any, table: any, col: any): any { +// FIXME: this might not work: what is col exactly, and how we use AddColumn? +function AddColumn( + db: Database, + table: string, + col: { [key: string]: string | number } +): RunResult { try { const colName = Object.keys(col)[0] const colType = col.type @@ -69,10 +78,17 @@ function AddColumn(db: any, table: any, col: any): any { return stmt.run() } catch (err) { console.error(err) + return null } } -function TableInfo(db: any, table: any): any { +function TableInfo( + db: Database, + table: string +): { + columns: any[] + dataCount: number +} { try { const command = `PRAGMA table_info(${table})` const stmt = PrepareStatement(db, command) @@ -90,10 +106,16 @@ function TableInfo(db: any, table: any): any { } } catch (err) { console.error(err) + return null } } -function Update(db: any, table: any, newData: any, conditions: any): any { +function Update( + db: Database, + table: string, + newData: { [key: string]: string | number }, + conditions: { [key: string]: string | number } +): RunResult { try { const command = `UPDATE ${table} SET ${GetSqlQuerry( newData, @@ -104,10 +126,15 @@ function Update(db: any, table: any, newData: any, conditions: any): any { return stmt.run() } catch (err) { console.error(err) + return null } } -function Delete(db: any, table: any, conditions: any): any { +function Delete( + db: Database, + table: string, + conditions: { [key: string]: string | number } +): RunResult { try { const command = `DELETE FROM ${table} WHERE ${GetSqlQuerry( conditions, @@ -118,10 +145,31 @@ function Delete(db: any, table: any, conditions: any): any { return stmt.run() } catch (err) { console.error(err) + return null } } -function CreateTable(db: any, name: any, columns: any, foreignKeys: any): any { +interface DbColumnDescription { + [key: string]: { + type: string + primary?: boolean + autoIncrement?: boolean + notNull?: boolean + defaultZero?: boolean + [key: string]: any + } +} + +function CreateTable( + db: Database, + name: string, + columns: DbColumnDescription, + foreignKeys: { + keysFrom: string[] + table: string + keysTo: string[] + }[] +): RunResult { // CREATE TABLE users(pw text PRIMARY KEY NOT NULL, id number, lastIP text, notes text, loginCount // number, lastLogin text, lastAccess text // @@ -152,20 +200,14 @@ function CreateTable(db: any, name: any, columns: any, foreignKeys: any): any { const fKeys: string[] = [] if (foreignKeys) { - foreignKeys.forEach( - (foreignKey: { - keysFrom: string[] - table: string - keysTo: string[] - }) => { - const { keysFrom, table, keysTo } = foreignKey - fKeys.push( - `, FOREIGN KEY(${keysFrom.join( - ', ' - )}) REFERENCES ${table}(${keysTo.join(', ')})` - ) - } - ) + foreignKeys.forEach((foreignKey) => { + const { keysFrom, table, keysTo } = foreignKey + fKeys.push( + `, FOREIGN KEY(${keysFrom.join( + ', ' + )}) REFERENCES ${table}(${keysTo.join(', ')})` + ) + }) } // IF NOT EXISTS @@ -174,10 +216,11 @@ function CreateTable(db: any, name: any, columns: any, foreignKeys: any): any { return stmt.run() } catch (err) { console.error(err) + return null } } -function SelectAll(db: any, from: any): any { +function SelectAll(db: Database, from: string): any[] { try { const command = `SELECT * from ${from}` @@ -185,11 +228,17 @@ function SelectAll(db: any, from: any): any { return stmt.all() } catch (err) { console.error(err) + return null } } // SELECT * FROM MyTable WHERE SomeColumn > LastValue ORDER BY SomeColumn LIMIT 100; -function Select(db: any, from: any, conditions: any, options: any = {}): any { +function Select( + db: Database, + from: string, + conditions: { [key: string]: string | number }, + options: { joiner?: string; limit?: number } = {} +): any[] { const { joiner, limit } = options try { @@ -207,10 +256,15 @@ function Select(db: any, from: any, conditions: any, options: any = {}): any { return stmt.all() } catch (err) { console.error(err) + return null } } -function Insert(db: any, table: any, data: any): any { +function Insert( + db: Database, + table: string, + data: { [key: string]: number | string } +): RunResult { try { const cols = Object.keys(data) .reduce((acc, key) => { @@ -220,15 +274,13 @@ function Insert(db: any, table: any, data: any): any { .join(', ') const values = Object.keys(data) - .reduce((acc, key) => { - const item = data[key] + .map((item) => { if (typeof item === 'string') { - acc.push(`'${item}'`) + return `'${item}'` } else { - acc.push(`${item}`) + return `${item}` } - return acc - }, []) + }) .join(', ') const command = `INSERT INTO ${table} (${cols}) VALUES (${values})` @@ -237,25 +289,22 @@ function Insert(db: any, table: any, data: any): any { return stmt.run() } catch (err) { console.error(err) + return null } } -function runStatement(db: any, command: string, runType?: string): any { +function runStatement(db: Database, command: string, runType?: string): any { const stmt = PrepareStatement(db, command) if (!runType) { return stmt.all() } else if (runType === 'run') { return stmt.run() } + return null } -function CloseDB(db: any): void { - db.close((err: Error) => { - if (err) { - return console.error(err.message) - } - DebugLog('Close the database connection.') - }) +function CloseDB(db: Database): void { + db.close() } // -------------------------------------------------------------------------