From c81f19e700963bf50c70e53087956dddb69bdb6d Mon Sep 17 00:00:00 2001 From: Bronwen Date: Thu, 21 Jul 2022 05:38:58 -0400 Subject: [PATCH] rebrand - and parameterization --- package-lock.json | 4 +- package.json | 2 +- packages/renderer/src/pages/Chat.tsx | 8 ++-- packages/server/.env | 2 +- .../public/migrations/1-chat-persistence.sql | 16 +++----- .../migrations/2-message-timestamps.sql | 8 +--- packages/server/src/constants.ts | 6 +++ packages/server/src/db/migrate.ts | 39 +++++++++++++------ .../server/src/db/snippets/message/new.sql | 2 +- .../server/src/db/snippets/message/recent.sql | 2 +- scripts/watch.js | 2 +- 11 files changed, 52 insertions(+), 39 deletions(-) create mode 100644 packages/server/src/constants.ts diff --git a/package-lock.json b/package-lock.json index 858709d..5ead22e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,10 +1,10 @@ { - "name": "viscord", + "name": "corner", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "viscord", + "name": "corner", "hasInstallScript": true, "dependencies": { "@types/mysql": "^2.15.21", diff --git a/package.json b/package.json index 131332a..ebd850a 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "viscord", + "name": "corner", "description": "Secure boilerplate for Electron app based on Vite", "private": true, "engines": { diff --git a/packages/renderer/src/pages/Chat.tsx b/packages/renderer/src/pages/Chat.tsx index 6a9c164..735ebe2 100644 --- a/packages/renderer/src/pages/Chat.tsx +++ b/packages/renderer/src/pages/Chat.tsx @@ -41,6 +41,7 @@ const mockMessages: Message[] = [ export default () => { const [messages, setMessages] = useState(mockMessages); + const [hist, setHist] = useState(false); const textBoxRef = useRef(null); @@ -50,7 +51,7 @@ export default () => { setMessages([...messages, data]); }, recent(data: { messages: Message[] }) { - setMessages(data.messages); + setMessages([...data.messages, ...messages]); }, }); registerRouter(actions); @@ -60,11 +61,12 @@ export default () => { }, [messages]); useEffect(() => { - if(messages.length === 0) { + if(!hist) { console.log('sending recents request'); send('recent'); + setHist(true); } - }, [messages]); + }, [hist]); const sendMessage = useCallback(() => { if(textBoxRef.current === null) return; diff --git a/packages/server/.env b/packages/server/.env index e6683e5..b9768d1 100644 --- a/packages/server/.env +++ b/packages/server/.env @@ -1,4 +1,4 @@ DB_HOST=localhost DB_USER=root DB_PASSWORD=example -DB_DB=viscord \ No newline at end of file +DB_DB=corner \ No newline at end of file diff --git a/packages/server/public/migrations/1-chat-persistence.sql b/packages/server/public/migrations/1-chat-persistence.sql index 0eeaaa3..046bf59 100644 --- a/packages/server/public/migrations/1-chat-persistence.sql +++ b/packages/server/public/migrations/1-chat-persistence.sql @@ -1,12 +1,9 @@ -SET NAMES utf8; -SET time_zone = '+00:00'; -SET foreign_key_checks = 0; -SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; +-- SET NAMES utf8; +-- SET time_zone = '+00:00'; +-- SET foreign_key_checks = 0; +-- SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; -SET NAMES utf8mb4; - -CREATE DATABASE `viscord` /*!40100 DEFAULT CHARACTER SET utf8mb4 */; -USE `viscord`; +-- SET NAMES utf8mb4; CREATE TABLE `messages` ( `id` int(11) NOT NULL AUTO_INCREMENT, @@ -21,7 +18,4 @@ CREATE TABLE `migrations` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -INSERT INTO `migrations` () - VALUES (); - -- 2022-07-21 01:27:49 \ No newline at end of file diff --git a/packages/server/public/migrations/2-message-timestamps.sql b/packages/server/public/migrations/2-message-timestamps.sql index c7d442b..019b4d2 100644 --- a/packages/server/public/migrations/2-message-timestamps.sql +++ b/packages/server/public/migrations/2-message-timestamps.sql @@ -1,8 +1,2 @@ - -USE `viscord`; - ALTER TABLE `messages` -ADD COLUMN `t_sent` BIGINT UNSIGNED AFTER `text`; - -INSERT INTO `migrations` () - VALUES (); \ No newline at end of file + ADD COLUMN `t_sent` BIGINT UNSIGNED AFTER `text`; \ No newline at end of file diff --git a/packages/server/src/constants.ts b/packages/server/src/constants.ts new file mode 100644 index 0000000..783c702 --- /dev/null +++ b/packages/server/src/constants.ts @@ -0,0 +1,6 @@ + + +export const DB_HOST = 'localhost'; +export const DB_USER = 'root'; +export const DB_PASSWORD = 'example'; +export const DB_NAME = 'corner'; \ No newline at end of file diff --git a/packages/server/src/db/migrate.ts b/packages/server/src/db/migrate.ts index db523bd..a60803b 100644 --- a/packages/server/src/db/migrate.ts +++ b/packages/server/src/db/migrate.ts @@ -4,11 +4,13 @@ import { createConnection } from 'mysql'; import { readdirSync, readFileSync } from 'fs'; import { dirname, resolve } from 'path'; import { fileURLToPath } from 'url'; +import { DB_HOST, DB_NAME, DB_PASSWORD, DB_USER } from '../constants'; const __dirname = dirname(fileURLToPath(import.meta.url)); -const host = 'localhost'; -const user = 'root'; -const password = 'example'; +const host = DB_HOST; +const user = DB_USER; +const password = DB_PASSWORD; +const database = DB_NAME; interface Migration { sql: string; @@ -35,6 +37,7 @@ export const connection = createConnection({ host, user, password, + database, }); const migrationConnection = createConnection({ host, @@ -44,7 +47,7 @@ const migrationConnection = createConnection({ }); const connected: Promise = new Promise((res, rej) => { - connection.connect((err) => { + migrationConnection.connect((err) => { if(err === null) { console.log('connected to database!'); res(null); @@ -61,17 +64,23 @@ export async function update() { await connected; // determine version const currentVersion: number = await new Promise((resolve, rej) => { - connection.query(` + migrationConnection.query(` SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA - WHERE SCHEMA_NAME = 'viscord' + WHERE SCHEMA_NAME = '${database}'; `, async (err, res, fields) => { if(res.length === 0) { + await new Promise((resolve, reject) => { + migrationConnection.query(`CREATE DATABASE \`${database}\` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;`, (err, res) => { + if(err) return reject(err); + return resolve(res); + }); + }); resolve(0); } else { const version: number = await new Promise((resolve, reject) => { - connection.query(` - SELECT max(id) as 'version' FROM viscord.migrations; + migrationConnection.query(` + SELECT max(id) as 'version' FROM ${database}.migrations; `, function (err, results, fields) { resolve(results[0].version); }); @@ -87,17 +96,25 @@ export async function update() { console.log('database up to date!'); } else { const difference = expectedVersion - currentVersion; - console.log(`database ${difference} version${difference !== 1 ? 's' : ''} behind`); + process.stdout.write(`database ${difference} version${difference !== 1 ? 's' : ''} behind`); // console.log(`${currentVersion} >>> ${expectedVersion}`); const neededMigrations = migrations.filter(m => m.version > currentVersion); + let completedMigrations = 0; for(const migration of neededMigrations) { - console.log(`${currentVersion} >>> ${migration.version}`); + console.log(`${currentVersion + completedMigrations} >>> ${migration.version}`); await new Promise((resolve, reject) => { - migrationConnection.query(migration.sql, (err, res) => { + migrationConnection.query(` + USE \`${database}\`; + ${migration.sql} + INSERT INTO \`migrations\` () + VALUES (); + `, (err, res) => { if(err !== null) return reject(err); console.log(`executed ${res.length} statement${res.length !== 0 ? 's' : ''}`); + return resolve(void 0); }); }); + completedMigrations ++; } } // console.log('database version:', currentVersion) diff --git a/packages/server/src/db/snippets/message/new.sql b/packages/server/src/db/snippets/message/new.sql index 2203022..9cfacbc 100644 --- a/packages/server/src/db/snippets/message/new.sql +++ b/packages/server/src/db/snippets/message/new.sql @@ -1,4 +1,4 @@ -INSERT INTO viscord.messages +INSERT INTO messages (`text`, `from`, `uid`, `t_sent`) VALUES ( ?, diff --git a/packages/server/src/db/snippets/message/recent.sql b/packages/server/src/db/snippets/message/recent.sql index 0027df5..9bdefd3 100644 --- a/packages/server/src/db/snippets/message/recent.sql +++ b/packages/server/src/db/snippets/message/recent.sql @@ -1,3 +1,3 @@ -SELECT * FROM viscord.messages +SELECT * FROM messages ORDER BY t_sent LIMIT 100; \ No newline at end of file diff --git a/scripts/watch.js b/scripts/watch.js index 69c5a58..2b97f30 100644 --- a/scripts/watch.js +++ b/scripts/watch.js @@ -58,7 +58,7 @@ const setupServerPackageWatcher = () => { }); /** Proxy all logs */ - spawnProcess.stdout.on('data', d => d.toString().trim() && logger.info(d.toString().trim(), {timestamp: true})); + spawnProcess.stdout.on('data', d => d.toString().trim() && d.toString().trim().split('\n').forEach(str => logger.info(str, {timestamp: true}))); /** Proxy error logs but stripe some noisy messages. See {@link stderrFilterPatterns} */ spawnProcess.stderr.on('data', d => {