From 25e1094242a91f46da05cd2a5d817d567de3039c Mon Sep 17 00:00:00 2001 From: Kevin Thomas Date: Mon, 16 Aug 2021 23:01:19 -0700 Subject: [PATCH] Add db serialize functions --- server/boot/db.js | 9 +++ server/routes/auth.js | 2 +- server/routes/profiles.js | 126 ++++++++++++++++++++++---------------- server/routes/samples.js | 8 ++- server/routes/users.js | 42 +++++++------ src/components/noise.js | 16 +++-- 6 files changed, 122 insertions(+), 81 deletions(-) diff --git a/server/boot/db.js b/server/boot/db.js index 8dfaadc..41c7633 100644 --- a/server/boot/db.js +++ b/server/boot/db.js @@ -35,8 +35,17 @@ module.exports = function () { db.run(`CREATE TABLE IF NOT EXISTS samples ( id INTEGER PRIMARY KEY, name TEXT UNIQUE, + volume INTEGER, user INTEGER, FOREIGN KEY(user) REFERENCES users(id))` ) + + db.run(`CREATE TABLE IF NOT EXISTS profiles_samples ( + id INTEGER PRIMARY KEY, + profile INTEGER, + sample INTEGER, + FOREIGN KEY(profile) REFERENCES profiles(id), + FOREIGN KEY(sample) REFERENCES samples(id))` + ) }) } diff --git a/server/routes/auth.js b/server/routes/auth.js index d7ce9cb..3965304 100644 --- a/server/routes/auth.js +++ b/server/routes/auth.js @@ -20,7 +20,7 @@ router.get('/admin', function (req, res) { return res.sendStatus(401) } - db.get('SELECT is_admin FROM users WHERE id = ?', [req.user.id], (err, row) => { + db.get('SELECT is_admin FROM users WHERE id = ?', [req.user.id], function (err, row) { if (err) { return res.sendStatus(500) } diff --git a/server/routes/profiles.js b/server/routes/profiles.js index a321ef1..7e73436 100644 --- a/server/routes/profiles.js +++ b/server/routes/profiles.js @@ -7,49 +7,65 @@ router.post('/profiles', function (req, res) { return res.sendStatus(401) } - db.run(`INSERT INTO profiles ( - name, - user, - timer_enabled, - duration, - volume, - noise_color, - filter_enabled, - filter_type, - filter_cutoff, - lfo_filter_cutoff_enabled, - lfo_filter_cutoff_frequency, - lfo_filter_cutoff_low, - lfo_filter_cutoff_high, - tremolo_enabled, - tremolo_frequency, - tremolo_depth) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [ - req.body.name, - req.user.id, - req.body.isTimerEnabled ? 1 : 0, - req.body.duration, - req.body.volume, - req.body.noiseColor, - req.body.isFilterEnabled ? 1 : 0, - req.body.filterType, - req.body.filterCutoff, - req.body.isLFOFilterCutoffEnabled ? 1 : 0, - req.body.lfoFilterCutoffFrequency, - req.body.lfoFilterCutoffLow, - req.body.lfoFilterCutoffHigh, - req.body.isTremoloEnabled ? 1 : 0, - req.body.tremoloFrequency, - req.body.tremoloDepth - ], - function (err) { - if (err) { - return res.sendStatus(500) - } else { - return res.sendStatus(200) - } - } - ) + let profileID = 0 + + db.serialize(function () { + db.run(`INSERT INTO profiles ( + name, + user, + timer_enabled, + duration, + volume, + noise_color, + filter_enabled, + filter_type, + filter_cutoff, + lfo_filter_cutoff_enabled, + lfo_filter_cutoff_frequency, + lfo_filter_cutoff_low, + lfo_filter_cutoff_high, + tremolo_enabled, + tremolo_frequency, + tremolo_depth) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [ + req.body.name, + req.user.id, + req.body.isTimerEnabled ? 1 : 0, + req.body.duration, + req.body.volume, + req.body.noiseColor, + req.body.isFilterEnabled ? 1 : 0, + req.body.filterType, + req.body.filterCutoff, + req.body.isLFOFilterCutoffEnabled ? 1 : 0, + req.body.lfoFilterCutoffFrequency, + req.body.lfoFilterCutoffLow, + req.body.lfoFilterCutoffHigh, + req.body.isTremoloEnabled ? 1 : 0, + req.body.tremoloFrequency, + req.body.tremoloDepth + ], + function (err) { + if (err) { + return res.sendStatus(500) + } + + profileID = this.lastID + }) + + req.body.samples.forEach(s => { + db.run('INSERT INTO profiles_samples (profile, sample) VALUES (?, ?)', [ + profileID, + s.id + ], + function (err) { + if (err) { + return res.sendStatus(500) + } + }) + }) + }) + return res.sendStatus(200) }) router.get('/profiles', function (req, res) { @@ -59,12 +75,12 @@ router.get('/profiles', function (req, res) { const profiles = [] - db.all('SELECT id, name FROM profiles WHERE user = ?', [req.user.id], (err, rows) => { + db.all('SELECT id, name FROM profiles WHERE user = ?', [req.user.id], function (err, rows) { if (err) { return res.sendStatus(500) } - rows.forEach((row) => { + rows.forEach(row => { const profile = {} profile.id = row.id @@ -101,7 +117,7 @@ router.get('/profiles/:profileId', function (req, res) { tremolo_enabled as isTremoloEnabled, tremolo_frequency as tremoloFrequency, tremolo_depth as tremoloDepth - FROM profiles WHERE id = ?`, [req.params.profileId], (err, row) => { + FROM profiles WHERE id = ?`, [req.params.profileId], function (err, row) { if (err) { return res.sendStatus(500) } @@ -135,16 +151,18 @@ router.delete('/profiles/:profileId', function (req, res) { return res.sendStatus(401) } - db.get('SELECT user FROM profiles WHERE id = ?', [req.params.profileId], (err, row) => { - if (err) { - return res.sendStatus(500) - } + db.serialize(function () { + db.get('SELECT user FROM profiles WHERE id = ?', [req.params.profileId], function (err, row) { + if (err) { + return res.sendStatus(500) + } - if (row.user.toString() !== req.user.id) { - return res.sendStatus(401) - } + if (row.user.toString() !== req.user.id) { + return res.sendStatus(401) + } + }) - db.run('DELETE FROM profiles WHERE id = ?', [req.params.profileId], (err) => { + db.run('DELETE FROM profiles WHERE id = ?', [req.params.profileId], function (err) { if (err) { return res.sendStatus(500) } else { diff --git a/server/routes/samples.js b/server/routes/samples.js index c0f9f98..18bb0ba 100644 --- a/server/routes/samples.js +++ b/server/routes/samples.js @@ -16,8 +16,9 @@ router.post('/samples', upload.single('sample'), function (req, res, next) { return res.sendStatus(401) } - db.run('INSERT INTO samples (name, user) VALUES (?, ?)', [ + db.run('INSERT INTO samples (name, volume, user) VALUES (?, ?, ?)', [ req.body.name, + 0, req.user.id ], function (err) { @@ -36,16 +37,17 @@ router.get('/samples', function (req, res) { const samples = [] - db.all('SELECT id, name FROM samples WHERE user = ?', [req.user.id], (err, rows) => { + db.all('SELECT id, name, volume FROM samples WHERE user = ?', [req.user.id], function (err, rows) { if (err) { return res.sendStatus(500) } - rows.forEach((row) => { + rows.forEach(row => { const sample = {} sample.id = row.id sample.name = row.name + sample.volume = row.volume samples.push(sample) }) diff --git a/server/routes/users.js b/server/routes/users.js index 4888321..be20eaa 100644 --- a/server/routes/users.js +++ b/server/routes/users.js @@ -8,7 +8,7 @@ router.get('/users/current', function (req, res) { return res.sendStatus(401) } - db.get('SELECT is_admin as isAdmin, * FROM users WHERE id = ?', [req.user.id], (err, row) => { + db.get('SELECT is_admin as isAdmin, * FROM users WHERE id = ?', [req.user.id], function (err, row) { if (err) { return res.sendStatus(500) } @@ -31,12 +31,12 @@ router.get('/users', function (req, res) { const users = [] - db.all('SELECT id, username, name, is_admin as isAdmin FROM users', (err, rows) => { + db.all('SELECT id, username, name, is_admin as isAdmin FROM users', function (err, rows) { if (err) { return res.sendStatus(500) } - rows.forEach((row) => { + rows.forEach(row => { const user = {} user.id = row.id @@ -94,16 +94,18 @@ router.patch('/users/:userId', function (req, res) { return res.sendStatus(401) } - db.get('SELECT is_admin FROM users WHERE id = ?', [req.user.id], (err, row) => { - if (err) { - return res.sendStatus(500) - } + db.serialize(function () { + db.get('SELECT is_admin FROM users WHERE id = ?', [req.user.id], function (err, row) { + if (err) { + return res.sendStatus(500) + } - if (row.is_admin === 0) { - return res.sendStatus(401) - } + if (row.is_admin === 0) { + return res.sendStatus(401) + } + }) - db.run('UPDATE users SET is_admin = ? WHERE id = ?', [req.body.isAdmin ? 1 : 0, req.params.userId], (err) => { + db.run('UPDATE users SET is_admin = ? WHERE id = ?', [req.body.isAdmin ? 1 : 0, req.params.userId], function (err) { if (err) { return res.sendStatus(500) } else { @@ -118,16 +120,18 @@ router.delete('/users/:userId', function (req, res) { return res.sendStatus(401) } - db.get('SELECT is_admin FROM users WHERE id = ?', [req.user.id], (err, row) => { - if (err) { - return res.sendStatus(500) - } + db.serialize(function () { + db.get('SELECT is_admin FROM users WHERE id = ?', [req.user.id], function (err, row) { + if (err) { + return res.sendStatus(500) + } - if (row.is_admin === 0) { - return res.sendStatus(401) - } + if (row.is_admin === 0) { + return res.sendStatus(401) + } + }) - db.run('DELETE FROM users WHERE id = ?', [req.params.userId], (err) => { + db.run('DELETE FROM users WHERE id = ?', [req.params.userId], function (err) { if (err) { return res.sendStatus(500) } else { diff --git a/src/components/noise.js b/src/components/noise.js index c32e491..5410306 100644 --- a/src/components/noise.js +++ b/src/components/noise.js @@ -189,7 +189,8 @@ export default { lfoFilterCutoffHigh: this.lfoFilterCutoffRange[1], isTremoloEnabled: this.isTremoloEnabled, tremoloFrequency: this.tremoloFrequency, - tremoloDepth: this.tremoloDepth + tremoloDepth: this.tremoloDepth, + samples: this.samples }) .catch(function (error) { console.error(error.response) @@ -240,13 +241,15 @@ export default { .then(response => { if (response.status === 200) { this.samples = response.data.samples - this.samples.forEach((s) => { - this.players.add(s.id, '/samples/' + s.name).toDestination() + this.samples.forEach(s => { + if (!this.players.has(s.id)) { + this.players.add(s.id, '/samples/' + s.name).toDestination() + } }) } }) .catch(function (error) { - console.error(error.response) + console.error(error) }) }, uploadSample () { @@ -260,6 +263,11 @@ export default { 'Content-Type': 'multipart/form-data' } }) + .then(response => { + if (response.status === 200) { + this.getSamples() + } + }) .catch(function (error) { console.error(error.response) })