feat: change mutation timestamp on every database mutation
This commit is contained in:
parent
d4b1550439
commit
b3df1dd7a6
|
@ -14,7 +14,8 @@ class userDemote extends Route {
|
|||
try {
|
||||
await db.table('users')
|
||||
.where({ id })
|
||||
.update({ isAdmin: false });
|
||||
.update({ isAdmin: false })
|
||||
.wasMutated();
|
||||
} catch (error) {
|
||||
return super.error(res, error);
|
||||
}
|
||||
|
|
|
@ -14,7 +14,8 @@ class userDisable extends Route {
|
|||
try {
|
||||
await db.table('users')
|
||||
.where({ id })
|
||||
.update({ enabled: false });
|
||||
.update({ enabled: false })
|
||||
.wasMutated();
|
||||
} catch (error) {
|
||||
return super.error(res, error);
|
||||
}
|
||||
|
|
|
@ -14,7 +14,8 @@ class userEnable extends Route {
|
|||
try {
|
||||
await db.table('users')
|
||||
.where({ id })
|
||||
.update({ enabled: true });
|
||||
.update({ enabled: true })
|
||||
.wasMutated();
|
||||
} catch (error) {
|
||||
return super.error(res, error);
|
||||
}
|
||||
|
|
|
@ -26,7 +26,8 @@ class albumDELETE extends Route {
|
|||
await db.table('albumsLinks').where({ albumId: id }).delete();
|
||||
|
||||
// Delete any album links created for this album
|
||||
await db.table('links').where({ albumId: id }).delete();
|
||||
await db.table('links').where({ albumId: id }).delete()
|
||||
.wasMutated();
|
||||
|
||||
return res.json({ message: 'The album was deleted successfully' });
|
||||
} catch (error) {
|
||||
|
|
|
@ -28,7 +28,7 @@ class albumPOST extends Route {
|
|||
editedAt: now
|
||||
};
|
||||
|
||||
const dbRes = await db.table('albums').insert(insertObj);
|
||||
const dbRes = await db.table('albums').insert(insertObj).wasMutated();
|
||||
|
||||
insertObj.id = dbRes.pop();
|
||||
|
||||
|
|
|
@ -18,7 +18,8 @@ class albumDELETE extends Route {
|
|||
|
||||
try {
|
||||
await Util.deleteAllFilesFromAlbum(id);
|
||||
await db.table('albums').where({ id }).delete();
|
||||
await db.table('albums').where({ id }).delete()
|
||||
.wasMutated();
|
||||
return res.json({ message: 'The album was deleted successfully' });
|
||||
} catch (error) {
|
||||
return super.error(res, error);
|
||||
|
|
|
@ -74,7 +74,8 @@ class albumGET extends Route {
|
|||
Util.createZip(filesToZip, album);
|
||||
await db.table('albums')
|
||||
.where('id', link.albumId)
|
||||
.update('zippedAt', db.fn.now());
|
||||
.update('zippedAt', db.fn.now())
|
||||
.wasMutated();
|
||||
|
||||
const filePath = path.join(__dirname, '../../../../', process.env.UPLOAD_FOLDER, 'zips', `${album.userId}-${album.id}.zip`);
|
||||
const fileName = `${process.env.SERVICE_NAME}-${identifier}.zip`;
|
||||
|
|
|
@ -63,7 +63,7 @@ class linkPOST extends Route {
|
|||
expiresAt: null,
|
||||
views: 0
|
||||
};
|
||||
await db.table('links').insert(insertObj);
|
||||
await db.table('links').insert(insertObj).wasMutated();
|
||||
|
||||
return res.json({
|
||||
message: 'The link was created successfully',
|
||||
|
|
|
@ -55,7 +55,7 @@ class registerPOST extends Route {
|
|||
editedAt: now,
|
||||
enabled: true,
|
||||
isAdmin: false
|
||||
});
|
||||
}).wasMutated();
|
||||
return res.json({ message: 'The account was created successfully' });
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ class albumAddPOST extends Route {
|
|||
|
||||
try {
|
||||
await db.table('albumsFiles')
|
||||
.insert({ fileId, albumId });
|
||||
.insert({ fileId, albumId }).wasMutated();
|
||||
} catch (error) {
|
||||
return super.error(res, error);
|
||||
}
|
||||
|
|
|
@ -19,7 +19,8 @@ class albumDelPOST extends Route {
|
|||
try {
|
||||
await db.table('albumsFiles')
|
||||
.where({ fileId, albumId })
|
||||
.delete();
|
||||
.delete()
|
||||
.wasMutated();
|
||||
} catch (error) {
|
||||
return super.error(res, error);
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ class tagAddBatchPOST extends Route {
|
|||
try {
|
||||
const tag = await db.table('tags').where({ name: tagName, userId: user.id }).first();
|
||||
if (!tag) throw new Error('Tag doesn\'t exist in the database');
|
||||
await db.table('fileTags').insert({ fileId, tagId: tag.id });
|
||||
await db.table('fileTags').insert({ fileId, tagId: tag.id }).wasMutated();
|
||||
|
||||
addedTags.push(tag);
|
||||
} catch (e) {
|
||||
|
|
|
@ -20,7 +20,7 @@ class tagAddPOST extends Route {
|
|||
if (!tag) return res.status(400).json({ message: 'Tag doesn\'t exist. ' });
|
||||
|
||||
try {
|
||||
await db.table('fileTags').insert({ fileId, tagId: tag.id });
|
||||
await db.table('fileTags').insert({ fileId, tagId: tag.id }).wasMutated();
|
||||
} catch (error) {
|
||||
return super.error(res, error);
|
||||
}
|
||||
|
|
|
@ -22,7 +22,8 @@ class tagDelPost extends Route {
|
|||
try {
|
||||
await db.table('fileTags')
|
||||
.where({ fileId, tagId: tag.id })
|
||||
.delete();
|
||||
.delete()
|
||||
.wasMutated();
|
||||
} catch (error) {
|
||||
return super.error(res, error);
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ const StatsGenerator = require('../../utils/StatsGenerator');
|
|||
// Thank you Bobby for the stats code https://github.com/BobbyWibowo/lolisafe/blob/safe.fiery.me/controllers/utilsController.js
|
||||
class filesGET extends Route {
|
||||
constructor() {
|
||||
super('/admin/stats', 'get', { adminOnly: true });
|
||||
super('/service/statistics', 'get', { adminOnly: true });
|
||||
}
|
||||
|
||||
async run(req, res, db) {
|
|
@ -26,7 +26,8 @@ class tagDELETE extends Route {
|
|||
/*
|
||||
Delete the tag
|
||||
*/
|
||||
await db.table('tags').where({ id }).delete();
|
||||
await db.table('tags').where({ id }).delete()
|
||||
.wasMutated();
|
||||
return res.json({ message: 'The tag was deleted successfully', data: tag });
|
||||
} catch (error) {
|
||||
return super.error(res, error);
|
||||
|
|
|
@ -25,7 +25,7 @@ class tagPOST extends Route {
|
|||
editedAt: now
|
||||
};
|
||||
|
||||
const dbRes = await db.table('tags').insert(insertObj);
|
||||
const dbRes = await db.table('tags').insert(insertObj).wasMutated();
|
||||
|
||||
insertObj.id = dbRes.pop();
|
||||
|
||||
|
|
|
@ -1,5 +1,13 @@
|
|||
const nodePath = require('path');
|
||||
const db = require('knex')({
|
||||
const Knex = require('knex');
|
||||
|
||||
// eslint-disable-next-line func-names
|
||||
Knex.QueryBuilder.extend('wasMutated', function() {
|
||||
this.client.config.userParams.lastMutationTime = Date.now();
|
||||
return this;
|
||||
});
|
||||
|
||||
const db = Knex({
|
||||
client: process.env.DB_CLIENT,
|
||||
connection: {
|
||||
host: process.env.DB_HOST,
|
||||
|
|
|
@ -99,7 +99,8 @@ class Util {
|
|||
await db
|
||||
.table('files')
|
||||
.where('name', filename)
|
||||
.delete();
|
||||
.delete()
|
||||
.wasMutated();
|
||||
}
|
||||
} catch (error) {
|
||||
log.error(`There was an error removing the file < ${filename} >`);
|
||||
|
@ -257,9 +258,9 @@ class Util {
|
|||
|
||||
let fileId;
|
||||
if (process.env.DB_CLIENT === 'sqlite3') {
|
||||
fileId = await db.table('files').insert(data);
|
||||
fileId = await db.table('files').insert(data).wasMutated();
|
||||
} else {
|
||||
fileId = await db.table('files').insert(data, 'id');
|
||||
fileId = await db.table('files').insert(data, 'id').wasMutated();
|
||||
}
|
||||
|
||||
return {
|
||||
|
@ -273,7 +274,7 @@ class Util {
|
|||
|
||||
const now = moment.utc().toDate();
|
||||
try {
|
||||
await db.table('albumsFiles').insert({ albumId, fileId: insertedId[0] });
|
||||
await db.table('albumsFiles').insert({ albumId, fileId: insertedId[0] }).wasMutated();
|
||||
await db.table('albums').where('id', albumId).update('editedAt', now);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
|
Loading…
Reference in New Issue