aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZephyrrus <[email protected]>2020-07-04 03:25:04 +0300
committerZephyrrus <[email protected]>2020-07-04 03:25:04 +0300
commitb620aa981546cb42e19f64d5349a9372e3d0c269 (patch)
tree48f3981b3b6ed264a9c8dc5117fc95127a1d28a5 /src
parentfeat: separate album view into multiple components and use vuex (diff)
downloadhost.fuwn.me-b620aa981546cb42e19f64d5349a9372e3d0c269.tar.xz
host.fuwn.me-b620aa981546cb42e19f64d5349a9372e3d0c269.zip
feat: refactor some of the queries to returned added/updated data
Diffstat (limited to 'src')
-rw-r--r--src/api/routes/albums/albumFullGET.js13
-rw-r--r--src/api/routes/albums/albumPOST.js17
-rw-r--r--src/api/routes/albums/albumsGET.js25
-rw-r--r--src/api/routes/albums/link/linkEditPOST.js21
-rw-r--r--src/api/routes/albums/link/linkPOST.js24
5 files changed, 64 insertions, 36 deletions
diff --git a/src/api/routes/albums/albumFullGET.js b/src/api/routes/albums/albumFullGET.js
index cf434e4..a5c9707 100644
--- a/src/api/routes/albums/albumFullGET.js
+++ b/src/api/routes/albums/albumFullGET.js
@@ -10,22 +10,27 @@ class albumGET extends Route {
const { id } = req.params;
if (!id) return res.status(400).json({ message: 'Invalid id supplied' });
- const album = await db.table('albums').where({ id, userId: user.id }).first();
+ const album = await db
+ .table('albums')
+ .where({ id, userId: user.id })
+ .first();
if (!album) return res.status(404).json({ message: 'Album not found' });
let count = 0;
- let files = db.table('albumsFiles')
+ let files = db
+ .table('albumsFiles')
.where({ albumId: id })
.join('files', 'albumsFiles.fileId', 'files.id')
- .select('files.id', 'files.name')
+ .select('files.id', 'files.name', 'files.createdAt')
.orderBy('files.id', 'desc');
const { page, limit = 100 } = req.query;
if (page && page >= 0) {
files = await files.offset((page - 1) * limit).limit(limit);
- const dbRes = await db.table('albumsFiles')
+ const dbRes = await db
+ .table('albumsFiles')
.count('* as count')
.where({ albumId: id })
.first();
diff --git a/src/api/routes/albums/albumPOST.js b/src/api/routes/albums/albumPOST.js
index 0d3a44c..841da3d 100644
--- a/src/api/routes/albums/albumPOST.js
+++ b/src/api/routes/albums/albumPOST.js
@@ -14,18 +14,25 @@ class albumPOST extends Route {
/*
Check that an album with that name doesn't exist yet
*/
- const album = await db.table('albums').where({ name, userId: user.id }).first();
- if (album) return res.status(401).json({ message: 'There\'s already an album with that name' });
+ const album = await db
+ .table('albums')
+ .where({ name, userId: user.id })
+ .first();
+ if (album) return res.status(401).json({ message: "There's already an album with that name" });
const now = moment.utc().toDate();
- await db.table('albums').insert({
+ const insertObj = {
name,
userId: user.id,
createdAt: now,
editedAt: now
- });
+ };
- return res.json({ message: 'The album was created successfully' });
+ const dbRes = await db.table('albums').insert(insertObj);
+
+ insertObj.id = dbRes.pop();
+
+ return res.json({ message: 'The album was created successfully', data: insertObj });
}
}
diff --git a/src/api/routes/albums/albumsGET.js b/src/api/routes/albums/albumsGET.js
index 1a7db87..569128c 100644
--- a/src/api/routes/albums/albumsGET.js
+++ b/src/api/routes/albums/albumsGET.js
@@ -12,30 +12,30 @@ class albumsGET extends Route {
of the album files for displaying on the dashboard. It's probably useless
for anyone consuming the API outside of the lolisafe frontend.
*/
- const albums = await db.table('albums')
+ const albums = await db
+ .table('albums')
.where('albums.userId', user.id)
- .select('id', 'name', 'editedAt');
+ .select('id', 'name', 'createdAt', 'editedAt')
+ .orderBy('createdAt', 'desc');
for (const album of albums) {
// TODO: Optimize the shit out of this. Ideally a JOIN that grabs all the needed stuff in 1 query instead of 3
// Fetch the total amount of files each album has.
- const fileCount = await db.table('albumsFiles') // eslint-disable-line no-await-in-loop
+ const fileCount = await db
+ .table('albumsFiles') // eslint-disable-line no-await-in-loop
.where('albumId', album.id)
.count({ count: 'id' });
// Fetch the file list from each album but limit it to 5 per album
- const filesToFetch = await db.table('albumsFiles') // eslint-disable-line no-await-in-loop
+ const files = await db
+ .table('albumsFiles') // eslint-disable-line no-await-in-loop
+ .join('files', { 'files.id': 'albumsFiles.fileId' })
.where('albumId', album.id)
- .select('fileId')
- .orderBy('id', 'desc')
+ .select('files.id', 'files.name')
+ .orderBy('albumsFiles.id', 'desc')
.limit(5);
- // Fetch the actual files
- const files = await db.table('files') // eslint-disable-line no-await-in-loop
- .whereIn('id', filesToFetch.map(el => el.fileId))
- .select('id', 'name');
-
// Fetch thumbnails and stuff
for (let file of files) {
file = Util.constructFilePublicLink(file);
@@ -58,7 +58,8 @@ class albumsDropdownGET extends Route {
}
async run(req, res, db, user) {
- const albums = await db.table('albums')
+ const albums = await db
+ .table('albums')
.where('userId', user.id)
.select('id', 'name');
return res.json({
diff --git a/src/api/routes/albums/link/linkEditPOST.js b/src/api/routes/albums/link/linkEditPOST.js
index 6776b73..0c7233b 100644
--- a/src/api/routes/albums/link/linkEditPOST.js
+++ b/src/api/routes/albums/link/linkEditPOST.js
@@ -14,17 +14,22 @@ class linkEditPOST extends Route {
/*
Make sure the link exists
*/
- const link = await db.table('links').where({ identifier, userId: user.id }).first();
- if (!link) return res.status(400).json({ message: 'The link doesn\'t exist or doesn\'t belong to the user' });
+ const link = await db
+ .table('links')
+ .where({ identifier, userId: user.id })
+ .first();
+ if (!link) return res.status(400).json({ message: "The link doesn't exist or doesn't belong to the user" });
try {
- await db.table('links')
+ const updateObj = {
+ enableDownload: enableDownload || false,
+ expiresAt // This one should be null if not supplied
+ };
+ await db
+ .table('links')
.where({ identifier })
- .update({
- enableDownload: enableDownload || false,
- expiresAt // This one should be null if not supplied
- });
- return res.json({ message: 'Editing the link was successful' });
+ .update(updateObj);
+ return res.json({ message: 'Editing the link was successful', data: updateObj });
} catch (error) {
return super.error(res, error);
}
diff --git a/src/api/routes/albums/link/linkPOST.js b/src/api/routes/albums/link/linkPOST.js
index 6009922..7ecc5cb 100644
--- a/src/api/routes/albums/link/linkPOST.js
+++ b/src/api/routes/albums/link/linkPOST.js
@@ -14,23 +14,32 @@ class linkPOST extends Route {
/*
Make sure the album exists
*/
- const exists = await db.table('albums').where({ id: albumId, userId: user.id }).first();
+ const exists = await db
+ .table('albums')
+ .where({ id: albumId, userId: user.id })
+ .first();
if (!exists) return res.status(400).json({ message: 'Album doesn\t exist' });
/*
Count the amount of links created for that album already and error out if max was reached
*/
- const count = await db.table('links').where('albumId', albumId).count({ count: 'id' });
- if (count[0].count >= parseInt(process.env.MAX_LINKS_PER_ALBUM, 10)) return res.status(400).json({ message: 'Maximum links per album reached' });
+ const count = await db
+ .table('links')
+ .where('albumId', albumId)
+ .count({ count: 'id' })
+ .first();
+ if (count >= parseInt(process.env.MAX_LINKS_PER_ALBUM, 10))
+ return res.status(400).json({ message: 'Maximum links per album reached' });
/*
Try to allocate a new identifier on the db
*/
const identifier = await Util.getUniqueAlbumIdentifier();
- if (!identifier) return res.status(500).json({ message: 'There was a problem allocating a link for your album' });
+ if (!identifier)
+ return res.status(500).json({ message: 'There was a problem allocating a link for your album' });
try {
- await db.table('links').insert({
+ const insertObj = {
identifier,
userId: user.id,
albumId,
@@ -38,11 +47,12 @@ class linkPOST extends Route {
enableDownload: true,
expiresAt: null,
views: 0
- });
+ };
+ await db.table('links').insert(insertObj);
return res.json({
message: 'The link was created successfully',
- identifier
+ data: insertObj
});
} catch (error) {
return super.error(res, error);