Add db serialize functions

This commit is contained in:
Kevin Thomas
2021-08-16 23:01:19 -07:00
parent 46033ce610
commit 25e1094242
6 changed files with 122 additions and 81 deletions

View File

@@ -35,8 +35,17 @@ module.exports = function () {
db.run(`CREATE TABLE IF NOT EXISTS samples ( db.run(`CREATE TABLE IF NOT EXISTS samples (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
name TEXT UNIQUE, name TEXT UNIQUE,
volume INTEGER,
user INTEGER, user INTEGER,
FOREIGN KEY(user) REFERENCES users(id))` 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))`
)
}) })
} }

View File

@@ -20,7 +20,7 @@ router.get('/admin', function (req, res) {
return res.sendStatus(401) 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) { if (err) {
return res.sendStatus(500) return res.sendStatus(500)
} }

View File

@@ -7,49 +7,65 @@ router.post('/profiles', function (req, res) {
return res.sendStatus(401) return res.sendStatus(401)
} }
db.run(`INSERT INTO profiles ( let profileID = 0
name,
user, db.serialize(function () {
timer_enabled, db.run(`INSERT INTO profiles (
duration, name,
volume, user,
noise_color, timer_enabled,
filter_enabled, duration,
filter_type, volume,
filter_cutoff, noise_color,
lfo_filter_cutoff_enabled, filter_enabled,
lfo_filter_cutoff_frequency, filter_type,
lfo_filter_cutoff_low, filter_cutoff,
lfo_filter_cutoff_high, lfo_filter_cutoff_enabled,
tremolo_enabled, lfo_filter_cutoff_frequency,
tremolo_frequency, lfo_filter_cutoff_low,
tremolo_depth) lfo_filter_cutoff_high,
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [ tremolo_enabled,
req.body.name, tremolo_frequency,
req.user.id, tremolo_depth)
req.body.isTimerEnabled ? 1 : 0, VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
req.body.duration, req.body.name,
req.body.volume, req.user.id,
req.body.noiseColor, req.body.isTimerEnabled ? 1 : 0,
req.body.isFilterEnabled ? 1 : 0, req.body.duration,
req.body.filterType, req.body.volume,
req.body.filterCutoff, req.body.noiseColor,
req.body.isLFOFilterCutoffEnabled ? 1 : 0, req.body.isFilterEnabled ? 1 : 0,
req.body.lfoFilterCutoffFrequency, req.body.filterType,
req.body.lfoFilterCutoffLow, req.body.filterCutoff,
req.body.lfoFilterCutoffHigh, req.body.isLFOFilterCutoffEnabled ? 1 : 0,
req.body.isTremoloEnabled ? 1 : 0, req.body.lfoFilterCutoffFrequency,
req.body.tremoloFrequency, req.body.lfoFilterCutoffLow,
req.body.tremoloDepth req.body.lfoFilterCutoffHigh,
], req.body.isTremoloEnabled ? 1 : 0,
function (err) { req.body.tremoloFrequency,
if (err) { req.body.tremoloDepth
return res.sendStatus(500) ],
} else { function (err) {
return res.sendStatus(200) 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) { router.get('/profiles', function (req, res) {
@@ -59,12 +75,12 @@ router.get('/profiles', function (req, res) {
const profiles = [] 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) { if (err) {
return res.sendStatus(500) return res.sendStatus(500)
} }
rows.forEach((row) => { rows.forEach(row => {
const profile = {} const profile = {}
profile.id = row.id profile.id = row.id
@@ -101,7 +117,7 @@ router.get('/profiles/:profileId', function (req, res) {
tremolo_enabled as isTremoloEnabled, tremolo_enabled as isTremoloEnabled,
tremolo_frequency as tremoloFrequency, tremolo_frequency as tremoloFrequency,
tremolo_depth as tremoloDepth 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) { if (err) {
return res.sendStatus(500) return res.sendStatus(500)
} }
@@ -135,16 +151,18 @@ router.delete('/profiles/:profileId', function (req, res) {
return res.sendStatus(401) return res.sendStatus(401)
} }
db.get('SELECT user FROM profiles WHERE id = ?', [req.params.profileId], (err, row) => { db.serialize(function () {
if (err) { db.get('SELECT user FROM profiles WHERE id = ?', [req.params.profileId], function (err, row) {
return res.sendStatus(500) if (err) {
} return res.sendStatus(500)
}
if (row.user.toString() !== req.user.id) { if (row.user.toString() !== req.user.id) {
return res.sendStatus(401) 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) { if (err) {
return res.sendStatus(500) return res.sendStatus(500)
} else { } else {

View File

@@ -16,8 +16,9 @@ router.post('/samples', upload.single('sample'), function (req, res, next) {
return res.sendStatus(401) return res.sendStatus(401)
} }
db.run('INSERT INTO samples (name, user) VALUES (?, ?)', [ db.run('INSERT INTO samples (name, volume, user) VALUES (?, ?, ?)', [
req.body.name, req.body.name,
0,
req.user.id req.user.id
], ],
function (err) { function (err) {
@@ -36,16 +37,17 @@ router.get('/samples', function (req, res) {
const samples = [] 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) { if (err) {
return res.sendStatus(500) return res.sendStatus(500)
} }
rows.forEach((row) => { rows.forEach(row => {
const sample = {} const sample = {}
sample.id = row.id sample.id = row.id
sample.name = row.name sample.name = row.name
sample.volume = row.volume
samples.push(sample) samples.push(sample)
}) })

View File

@@ -8,7 +8,7 @@ router.get('/users/current', function (req, res) {
return res.sendStatus(401) 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) { if (err) {
return res.sendStatus(500) return res.sendStatus(500)
} }
@@ -31,12 +31,12 @@ router.get('/users', function (req, res) {
const users = [] 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) { if (err) {
return res.sendStatus(500) return res.sendStatus(500)
} }
rows.forEach((row) => { rows.forEach(row => {
const user = {} const user = {}
user.id = row.id user.id = row.id
@@ -94,16 +94,18 @@ router.patch('/users/:userId', function (req, res) {
return res.sendStatus(401) return res.sendStatus(401)
} }
db.get('SELECT is_admin FROM users WHERE id = ?', [req.user.id], (err, row) => { db.serialize(function () {
if (err) { db.get('SELECT is_admin FROM users WHERE id = ?', [req.user.id], function (err, row) {
return res.sendStatus(500) if (err) {
} return res.sendStatus(500)
}
if (row.is_admin === 0) { if (row.is_admin === 0) {
return res.sendStatus(401) 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) { if (err) {
return res.sendStatus(500) return res.sendStatus(500)
} else { } else {
@@ -118,16 +120,18 @@ router.delete('/users/:userId', function (req, res) {
return res.sendStatus(401) return res.sendStatus(401)
} }
db.get('SELECT is_admin FROM users WHERE id = ?', [req.user.id], (err, row) => { db.serialize(function () {
if (err) { db.get('SELECT is_admin FROM users WHERE id = ?', [req.user.id], function (err, row) {
return res.sendStatus(500) if (err) {
} return res.sendStatus(500)
}
if (row.is_admin === 0) { if (row.is_admin === 0) {
return res.sendStatus(401) 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) { if (err) {
return res.sendStatus(500) return res.sendStatus(500)
} else { } else {

View File

@@ -189,7 +189,8 @@ export default {
lfoFilterCutoffHigh: this.lfoFilterCutoffRange[1], lfoFilterCutoffHigh: this.lfoFilterCutoffRange[1],
isTremoloEnabled: this.isTremoloEnabled, isTremoloEnabled: this.isTremoloEnabled,
tremoloFrequency: this.tremoloFrequency, tremoloFrequency: this.tremoloFrequency,
tremoloDepth: this.tremoloDepth tremoloDepth: this.tremoloDepth,
samples: this.samples
}) })
.catch(function (error) { .catch(function (error) {
console.error(error.response) console.error(error.response)
@@ -240,13 +241,15 @@ export default {
.then(response => { .then(response => {
if (response.status === 200) { if (response.status === 200) {
this.samples = response.data.samples this.samples = response.data.samples
this.samples.forEach((s) => { this.samples.forEach(s => {
this.players.add(s.id, '/samples/' + s.name).toDestination() if (!this.players.has(s.id)) {
this.players.add(s.id, '/samples/' + s.name).toDestination()
}
}) })
} }
}) })
.catch(function (error) { .catch(function (error) {
console.error(error.response) console.error(error)
}) })
}, },
uploadSample () { uploadSample () {
@@ -260,6 +263,11 @@ export default {
'Content-Type': 'multipart/form-data' 'Content-Type': 'multipart/form-data'
} }
}) })
.then(response => {
if (response.status === 200) {
this.getSamples()
}
})
.catch(function (error) { .catch(function (error) {
console.error(error.response) console.error(error.response)
}) })