mirror of
https://github.com/plankanban/planka.git
synced 2025-12-19 17:23:27 +03:00
feat: Track storage usage
This commit is contained in:
50
server/api/hooks/query-methods/models/UploadedFile.js
Normal file
50
server/api/hooks/query-methods/models/UploadedFile.js
Normal file
@@ -0,0 +1,50 @@
|
||||
/*!
|
||||
* Copyright (c) 2024 PLANKA Software GmbH
|
||||
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
const COLUMN_NAME_BY_TYPE = {
|
||||
[UploadedFile.Types.USER_AVATAR]: 'user_avatars',
|
||||
[UploadedFile.Types.BACKGROUND_IMAGE]: 'background_images',
|
||||
[UploadedFile.Types.ATTACHMENT]: 'attachments',
|
||||
};
|
||||
|
||||
/* Query methods */
|
||||
|
||||
const createOne = (values) =>
|
||||
sails.getDatastore().transaction(async (db) => {
|
||||
const uploadedFile = await UploadedFile.create({ ...values })
|
||||
.fetch()
|
||||
.usingConnection(db);
|
||||
|
||||
const columnName = COLUMN_NAME_BY_TYPE[uploadedFile.type];
|
||||
|
||||
await sails
|
||||
.sendNativeQuery(
|
||||
`UPDATE storage_usage SET total = total + $1, ${columnName} = ${columnName} + $1, updated_at = $2 WHERE id = $3`,
|
||||
[uploadedFile.size, new Date().toISOString(), StorageUsage.MAIN_ID],
|
||||
)
|
||||
.usingConnection(db);
|
||||
|
||||
return uploadedFile;
|
||||
});
|
||||
|
||||
const deleteOne = (criteria) =>
|
||||
sails.getDatastore().transaction(async (db) => {
|
||||
const uploadedFile = await UploadedFile.destroyOne(criteria).usingConnection(db);
|
||||
const columnName = COLUMN_NAME_BY_TYPE[uploadedFile.type];
|
||||
|
||||
await sails
|
||||
.sendNativeQuery(
|
||||
`UPDATE storage_usage SET total = total - $1, ${columnName} = ${columnName} - $1, updated_at = $2 WHERE id = $3`,
|
||||
[uploadedFile.size, new Date().toISOString(), StorageUsage.MAIN_ID],
|
||||
)
|
||||
.usingConnection(db);
|
||||
|
||||
return uploadedFile;
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
createOne,
|
||||
deleteOne,
|
||||
};
|
||||
Reference in New Issue
Block a user