feat: Track storage usage

This commit is contained in:
Maksim Eltyshev
2025-08-23 00:03:20 +02:00
parent 2f4bcb0583
commit 4d77a1f596
89 changed files with 1052 additions and 304 deletions

View 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,
};