From 301f255d0d5e1dd92fc16d2cf3c986bccbc9aeaf Mon Sep 17 00:00:00 2001 From: plane000 Date: Fri, 7 Sep 2018 21:09:46 +0100 Subject: [PATCH] db abstractions done --- logs.log | 84 +++++++++++++++ src/models/database/baseDatabase.js | 7 ++ src/models/database/notegroups.js | 91 ++++++++++++++++ src/models/database/notes.js | 162 +++++++++++++++++++++++++++- 4 files changed, 343 insertions(+), 1 deletion(-) diff --git a/logs.log b/logs.log index 327ef44..4d6bf4f 100644 --- a/logs.log +++ b/logs.log @@ -963,3 +963,87 @@ [2018-9-7 19:00:34] [INFO] HTTP endpoints settup [2018-9-7 19:00:34] [INFO] Initialized ratelimiting middleware [2018-9-7 19:00:34] [READY] +[SYSTEM STARTING UP] +[2018-9-7 19:45:50] [INFO] Loading config +[2018-9-7 19:45:50] [INFO] LOADED: src/config/configs/server.json +[2018-9-7 19:45:50] [INFO] LOADED: src/config/configs/database.json +[2018-9-7 19:45:50] [INFO] Config loaded +[2018-9-7 19:45:50] [INFO] Connecting to SQLite Database +[2018-9-7 19:45:50] [SQLITE] Executing (default): CREATE TABLE IF NOT EXISTS `user` (`id` BIGINT UNIQUE PRIMARY KEY, `username` TEXT, `password` TEXT, `email` TEXT, `ip` TEXT, `lastupdated` TEXT, `verified` TINYINT(1), `authcode` TEXT, `timeauthed` TEXT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL); +[2018-9-7 19:45:50] [SQLITE] Executing (default): PRAGMA INDEX_LIST(`user`) +[2018-9-7 19:45:50] [SQLITE] Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_user_1`) +[2018-9-7 19:45:50] [SQLITE] Executing (default): CREATE TABLE IF NOT EXISTS `auth` (`id` BIGINT UNIQUE PRIMARY KEY, `token` TEXT, `passhash` TEXT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL); +[2018-9-7 19:45:50] [SQLITE] Executing (default): PRAGMA INDEX_LIST(`auth`) +[2018-9-7 19:45:50] [SQLITE] Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_auth_1`) +[2018-9-7 19:45:50] [SQLITE] Executing (default): CREATE TABLE IF NOT EXISTS `permanote` (`uid` BIGINT UNIQUE PRIMARY KEY, `endpoint` TEXT, `text` TEXT, `creatorid` BIGINT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL); +[2018-9-7 19:45:50] [SQLITE] Executing (default): PRAGMA INDEX_LIST(`permanote`) +[2018-9-7 19:45:50] [SQLITE] Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_permanote_1`) +[2018-9-7 19:45:50] [SQLITE] Executing (default): CREATE TABLE IF NOT EXISTS `group` (`id` BIGINT UNIQUE PRIMARY KEY, `creatorid` BIGINT, `order` INTEGER, `lastupdated` TEXT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL); +[2018-9-7 19:45:50] [SQLITE] Executing (default): PRAGMA INDEX_LIST(`group`) +[2018-9-7 19:45:50] [SQLITE] Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_group_1`) +[2018-9-7 19:45:50] [SQLITE] Executing (default): CREATE TABLE IF NOT EXISTS `note` (`id` BIGINT UNIQUE PRIMARY KEY, `content` TEXT, `parentgroup` BIGINT, `creatorid` BIGINT, `order` INTEGER, `catergory` TEXT, `lastupdated` TEXT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL); +[2018-9-7 19:45:50] [SQLITE] Executing (default): PRAGMA INDEX_LIST(`note`) +[2018-9-7 19:45:50] [SQLITE] Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_note_1`) +[2018-9-7 19:45:50] [INFO] Connected to SQLite Database +[2018-9-7 19:45:50] [INFO] Server created +[2018-9-7 19:45:50] [INFO] HTTP service is listening at port 8080 +[2018-9-7 19:45:50] [INFO] Setting up API HTTP endpoints +[2018-9-7 19:45:50] [INFO] HTTP endpoints settup +[2018-9-7 19:45:50] [INFO] Initialized ratelimiting middleware +[2018-9-7 19:45:50] [READY] +[SYSTEM STARTING UP] +[2018-9-7 20:01:02] [INFO] Loading config +[2018-9-7 20:01:02] [INFO] LOADED: src/config/configs/server.json +[2018-9-7 20:01:02] [INFO] LOADED: src/config/configs/database.json +[2018-9-7 20:01:02] [INFO] Config loaded +[2018-9-7 20:01:02] [INFO] Connecting to SQLite Database +[2018-9-7 20:01:02] [SQLITE] Executing (default): CREATE TABLE IF NOT EXISTS `user` (`id` BIGINT UNIQUE PRIMARY KEY, `username` TEXT, `password` TEXT, `email` TEXT, `ip` TEXT, `lastupdated` TEXT, `verified` TINYINT(1), `authcode` TEXT, `timeauthed` TEXT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL); +[2018-9-7 20:01:02] [SQLITE] Executing (default): PRAGMA INDEX_LIST(`user`) +[2018-9-7 20:01:02] [SQLITE] Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_user_1`) +[2018-9-7 20:01:02] [SQLITE] Executing (default): CREATE TABLE IF NOT EXISTS `auth` (`id` BIGINT UNIQUE PRIMARY KEY, `token` TEXT, `passhash` TEXT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL); +[2018-9-7 20:01:02] [SQLITE] Executing (default): PRAGMA INDEX_LIST(`auth`) +[2018-9-7 20:01:02] [SQLITE] Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_auth_1`) +[2018-9-7 20:01:02] [SQLITE] Executing (default): CREATE TABLE IF NOT EXISTS `permanote` (`uid` BIGINT UNIQUE PRIMARY KEY, `endpoint` TEXT, `text` TEXT, `creatorid` BIGINT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL); +[2018-9-7 20:01:02] [SQLITE] Executing (default): PRAGMA INDEX_LIST(`permanote`) +[2018-9-7 20:01:02] [SQLITE] Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_permanote_1`) +[2018-9-7 20:01:02] [SQLITE] Executing (default): CREATE TABLE IF NOT EXISTS `group` (`id` BIGINT UNIQUE PRIMARY KEY, `creatorid` BIGINT, `order` INTEGER, `lastupdated` TEXT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL); +[2018-9-7 20:01:02] [SQLITE] Executing (default): PRAGMA INDEX_LIST(`group`) +[2018-9-7 20:01:02] [SQLITE] Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_group_1`) +[2018-9-7 20:01:02] [SQLITE] Executing (default): CREATE TABLE IF NOT EXISTS `note` (`id` BIGINT UNIQUE PRIMARY KEY, `content` TEXT, `parentgroup` BIGINT, `creatorid` BIGINT, `order` INTEGER, `catergory` TEXT, `lastupdated` TEXT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL); +[2018-9-7 20:01:02] [SQLITE] Executing (default): PRAGMA INDEX_LIST(`note`) +[2018-9-7 20:01:02] [SQLITE] Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_note_1`) +[2018-9-7 20:01:02] [INFO] Connected to SQLite Database +[2018-9-7 20:01:02] [INFO] Server created +[2018-9-7 20:01:02] [INFO] HTTP service is listening at port 8080 +[2018-9-7 20:01:02] [INFO] Setting up API HTTP endpoints +[2018-9-7 20:01:02] [INFO] HTTP endpoints settup +[2018-9-7 20:01:02] [INFO] Initialized ratelimiting middleware +[2018-9-7 20:01:02] [READY] +[SYSTEM STARTING UP] +[2018-9-7 21:09:22] [INFO] Loading config +[2018-9-7 21:09:22] [INFO] LOADED: src/config/configs/server.json +[2018-9-7 21:09:22] [INFO] LOADED: src/config/configs/database.json +[2018-9-7 21:09:22] [INFO] Config loaded +[2018-9-7 21:09:22] [INFO] Connecting to SQLite Database +[2018-9-7 21:09:22] [SQLITE] Executing (default): CREATE TABLE IF NOT EXISTS `user` (`id` BIGINT UNIQUE PRIMARY KEY, `username` TEXT, `password` TEXT, `email` TEXT, `ip` TEXT, `lastupdated` TEXT, `verified` TINYINT(1), `authcode` TEXT, `timeauthed` TEXT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL); +[2018-9-7 21:09:22] [SQLITE] Executing (default): PRAGMA INDEX_LIST(`user`) +[2018-9-7 21:09:22] [SQLITE] Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_user_1`) +[2018-9-7 21:09:22] [SQLITE] Executing (default): CREATE TABLE IF NOT EXISTS `auth` (`id` BIGINT UNIQUE PRIMARY KEY, `token` TEXT, `passhash` TEXT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL); +[2018-9-7 21:09:22] [SQLITE] Executing (default): PRAGMA INDEX_LIST(`auth`) +[2018-9-7 21:09:22] [SQLITE] Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_auth_1`) +[2018-9-7 21:09:22] [SQLITE] Executing (default): CREATE TABLE IF NOT EXISTS `permanote` (`uid` BIGINT UNIQUE PRIMARY KEY, `endpoint` TEXT, `text` TEXT, `creatorid` BIGINT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL); +[2018-9-7 21:09:22] [SQLITE] Executing (default): PRAGMA INDEX_LIST(`permanote`) +[2018-9-7 21:09:22] [SQLITE] Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_permanote_1`) +[2018-9-7 21:09:22] [SQLITE] Executing (default): CREATE TABLE IF NOT EXISTS `group` (`id` BIGINT UNIQUE PRIMARY KEY, `creatorid` BIGINT, `order` INTEGER, `lastupdated` TEXT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL); +[2018-9-7 21:09:22] [SQLITE] Executing (default): PRAGMA INDEX_LIST(`group`) +[2018-9-7 21:09:22] [SQLITE] Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_group_1`) +[2018-9-7 21:09:22] [SQLITE] Executing (default): CREATE TABLE IF NOT EXISTS `note` (`id` BIGINT UNIQUE PRIMARY KEY, `content` TEXT, `parentgroup` BIGINT, `creatorid` BIGINT, `order` INTEGER, `catergory` TEXT, `endpoint` TEXT UNIQUE, `lastupdated` TEXT, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL); +[2018-9-7 21:09:22] [SQLITE] Executing (default): PRAGMA INDEX_LIST(`note`) +[2018-9-7 21:09:22] [SQLITE] Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_note_1`) +[2018-9-7 21:09:22] [INFO] Connected to SQLite Database +[2018-9-7 21:09:22] [INFO] Server created +[2018-9-7 21:09:22] [INFO] HTTP service is listening at port 8080 +[2018-9-7 21:09:22] [INFO] Setting up API HTTP endpoints +[2018-9-7 21:09:22] [INFO] HTTP endpoints settup +[2018-9-7 21:09:22] [INFO] Initialized ratelimiting middleware +[2018-9-7 21:09:22] [READY] diff --git a/src/models/database/baseDatabase.js b/src/models/database/baseDatabase.js index 9834367..b2f9d40 100644 --- a/src/models/database/baseDatabase.js +++ b/src/models/database/baseDatabase.js @@ -16,6 +16,8 @@ export class BaseDatabase { static get User() {return User} static get Auth() {return Auth} static get PermaNote() {return PermaNote} + static get Group() {return Group} + static get Note() {return Note} static async init() { Logger.info('Connecting to SQLite Database'); @@ -104,6 +106,11 @@ export class BaseDatabase { type: Sequelize.TEXT, allowNull: true }, + endpoint: { + type: Sequelize.TEXT, + allowNull: true, + unique: true + }, lastupdated: Sequelize.TEXT }, { tableName: `note` diff --git a/src/models/database/notegroups.js b/src/models/database/notegroups.js index 59adf9a..e632984 100644 --- a/src/models/database/notegroups.js +++ b/src/models/database/notegroups.js @@ -2,5 +2,96 @@ import {BaseDatabase} from './baseDatabase'; import {Logger} from '../logger'; export class NoteGroupTools extends BaseDatabase { + static async newGroup(id, creatorid, order) { + let Group = BaseDatabase.Group; + try { + let group = await Group.create({ + id: id, + creatorid: creatorid, + order: order, + lastupdated: new Date().getTime() + }); + return group; + } catch (e) { + Logger.error(`An error occured while inserting group ${id}: ${e}`); + return -1; + } + } + + static async deleteGroup(id) { + let Group = BaseDatabase.Group; + + try { + await Group.destroy({where: {id: id}}); + return 1; + } catch (e) { + Logger.error(`An error occured while deleting group ${id}: ${e}`); + return -1; + } + } + + static async renameGroup(id, newName) { + let Group = BaseDatabase.Group; + + try { + await Group.update({name: newName}, {where: {id: id}}); + await this.updateLastUpdatedTime(id); + return 1; + } catch (e) { + Logger.error(`An error occured while updating group ${id}: ${e}`); + return -1; + } + } + + static async reorderGroup(id, newPosition) { + let Group = BaseDatabase.Group; + + try { + await Group.update({order: newPosition}, {where: {id: id}}); + await this.updateLastUpdatedTime(id); + return 1; + } catch (e) { + Logger.error(`An error occured while updating group ${id}: ${e}`); + return -1; + } + } + + static async getGroupByID(id) { + let Group = BaseDatabase.Group; + + try { + let group = await Group.findOne({where: {id: id}}); + if (group == null) return -1; + return group; + } catch (e) { + Logger.error(`An error occured while getting group ${id}: ${e}`); + return -1; + } + } + + static async getAllUsersGroups(userid) { + let Group = BaseDatabase.Group; + + try { + let group = Group.findAll({where: {creatorid: userid}}); + if (group == null) return -1; + return group; + } catch (e) { + Logger.error(`An error occured while getting groups from ${userid}: ${e}`); + return -1; + } + } + + static async updateLastUpdatedTime(id) { + let Group = BaseDatabase.Group; + + try { + await Group.update({lastupdated: new Date().getTime()}, {where: {id: id}}); + return 1; + } catch (e) { + Logger.error(`An error occured while updating group ${id}: ${e}`); + return -1; + } + } } diff --git a/src/models/database/notes.js b/src/models/database/notes.js index 7915ec8..797f7d2 100644 --- a/src/models/database/notes.js +++ b/src/models/database/notes.js @@ -2,5 +2,165 @@ import {BaseDatabase} from './baseDatabase'; import {Logger} from '../logger'; export class NoteTools extends BaseDatabase { + static async newNote(id, content, creatorid, order, parentgroup) { + parentgroup = parentgroup || null; + let Note = BaseDatabase.Note; -} \ No newline at end of file + try { + let note = await Note.create({ + id: id, + content: content, + parentgroup: parentgroup, + creatorid: creatorid, + order: order, + catergory: null, + endpoint: null, + lastupdated: new Date().getTime() + }); + return note; + } catch (e) { + Logger.error(`An error occured while inserting group ${id}: ${e}`); + return -1; + } + } + + static async deleteNote(id) { + let Note = BaseDatabase.Note; + + try { + await Note.destroy({where: {id: id}}); + return 1; + } catch (e) { + Logger.error(`An error occured while inserting group ${id}: ${e}`); + return -1; + } + } + + static async makePermaLink(id, endpoint) { + let Note = BaseDatabase.Note; + + try { + await Note.update({endpoint: endpoint}, {where: {id: id}}); + await this.updateLastUpdateTime(id); + } catch (e) { + Logger.error(`An error occured while inserting group ${id}: ${e}`); + return -1; + } + } + + static async getNoteByEndpoint(endpoint) { + let Note = BaseDatabase.Note; + + try { + let note = await Note.findOne({where: {endpoint: endpoint}}); + if (note == null) return -1; + return note; + } catch (e) { + Logger.error(`An error occured while inserting group ${id}: ${e}`); + return -1; + } + } + + static async updateNote(id, newContent) { + let Note = BaseDatabase.Note; + + try { + await Note.update({content: newContent}, {where: {id: id}}); + await this.updateLastUpdatedTime(id); + return 1; + } catch (e) { + Logger.error(`An error occured while inserting group ${id}: ${e}`); + return -1; + } + } + + static async updateCatergory(id, newCatergory) { + let Note = BaseDatabase.Note; + + try { + await Note.update({catergory: newCatergory}, {where: {id: id}}); + await this.updateLastUpdatedTime(id); + return 1; + } catch (e) { + Logger.error(`An error occured while inserting group ${id}: ${e}`); + return -1; + } + } + + static async reorderNote(id, newOrder) { + let Note = BaseDatabase.Note; + + try { + await Note.update({order: newOrder}, {where: {id: id}}); + await this.updateLastUpdatedTime(id); + return 1; + } catch (e) { + Logger.error(`An error occured while inserting group ${id}: ${e}`); + return -1; + } + } + + static async renameNote(id, newName) { + let Note = BaseDatabase.Note; + + try { + await Note.update({name: newName}, {where: {id: id}}); + await this.updateLastUpdatedTime(id); + return 1; + } catch (e) { + Logger.error(`An error occured while inserting group ${id}: ${e}`); + return -1; + } + } + + static async getNoteByID(id) { + let Note = BaseDatabase.Note; + + try { + let note = await Note.findOne({where: {id: id}}); + if (note == null) return -1; + return note; + } catch (e) { + Logger.error(`An error occured while inserting group ${id}: ${e}`); + return -1; + } + } + + static async getAllUserNotes(userid) { + let Note = BaseDatabase.Note; + + try { + let note = await Note.findAll({where: {creatorid: userid}}); + if (note == null) return -1; + return note; + } catch (e) { + Logger.error(`An error occured while inserting group ${id}: ${e}`); + return -1; + } + } + + static async getAllGroupedNotes(groupid) { + let Note = BaseDatabase.Note; + + try { + let note = await Note.findAll({where: {parentgroup: groupid}}); + if (note == null) return -1; + return note; + } catch (e) { + Logger.error(`An error occured while inserting group ${id}: ${e}`); + return -1; + } + } + + static async updateLastUpdateTime(id) { + let Note = BaseDatabase.Note; + + try { + await Note.update({lastupdated: new Date().getTime()}, {where: {id: id}}); + return 1; + } catch (e) { + Logger.error(`An error occured while inserting group ${id}: ${e}`); + return -1; + } + } +}