From 8f33bf02bcd252d193e1192cdfeefc33c0665209 Mon Sep 17 00:00:00 2001 From: Danila Alekseev Date: Thu, 21 May 2020 01:22:50 +0300 Subject: [PATCH] fixed nupkg assets id duplication --- api/controllers/AssetController.js | 3 ++ api/models/Asset.js | 10 +++++-- api/services/AssetService.js | 11 +++++++ ...00000-asset-package-type-migration copy.js | 30 +++++++++++++++++++ 4 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 migrations/20200520000000-asset-package-type-migration copy.js diff --git a/api/controllers/AssetController.js b/api/controllers/AssetController.js index 35a1907ba..45f99bb8e 100644 --- a/api/controllers/AssetController.js +++ b/api/controllers/AssetController.js @@ -210,11 +210,13 @@ module.exports = { sails.log.debug('Creating asset with name', data.name || uploadedFile.filename); var hashPromise; + var packageType; if (fileExt === '.nupkg') { // Calculate the hash of the file, as it is necessary for windows // files hashPromise = AssetService.getHash(uploadedFile.fd); + packageType = AssetService.getPackageType(uploadedFile.filename); } else if (fileExt === '.exe' || fileExt === '.zip') { hashPromise = AssetService.getHash(uploadedFile.fd, 'sha256'); } else { @@ -229,6 +231,7 @@ module.exports = { name: uploadedFile.filename, hash: fileHash, filetype: fileExt, + package_type: packageType, fd: uploadedFile.fd, size: uploadedFile.size }, data)) diff --git a/api/models/Asset.js b/api/models/Asset.js index 65cd60650..95b0eb7f6 100644 --- a/api/models/Asset.js +++ b/api/models/Asset.js @@ -31,6 +31,10 @@ module.exports = { required: true }, + package_type: { + type: 'string' + }, + hash: { type: 'string' }, @@ -60,9 +64,11 @@ module.exports = { autoPK: false, beforeCreate: (asset, proceed) => { - const { version, platform, filetype } = asset; + const { version, platform, filetype, package_type } = asset; - asset.id = `${version}_${platform}_${filetype.replace(/\./g, '')}`; + asset.id = [version, platform, filetype.replace(/\./g, ''), package_type] + .filter(arg => arg) + .join('_'); return proceed(); } diff --git a/api/services/AssetService.js b/api/services/AssetService.js index 696e34978..ea58167a9 100644 --- a/api/services/AssetService.js +++ b/api/services/AssetService.js @@ -90,6 +90,17 @@ AssetService.getHash = function(fd, type = 'sha1') { }); }; +/** + * Returns nupkg type (full, delta) from filename + */ +AssetService.getPackageType = function(filename) { + var matches = filename.match(/.*-(\w+)\.nupkg/); + + return matches && matches.length === 2 + ? matches[1] + : undefined; +} + /** * Deletes an asset from the database. diff --git a/migrations/20200520000000-asset-package-type-migration copy.js b/migrations/20200520000000-asset-package-type-migration copy.js new file mode 100644 index 000000000..3ff1820de --- /dev/null +++ b/migrations/20200520000000-asset-package-type-migration copy.js @@ -0,0 +1,30 @@ +'use strict'; + +const { driver } = require('db-migrate').getInstance().config.getCurrent().settings; + +const sql = { + + // PostgreSQL + pg: { + up: ( + + // Add `package_type` column (if doesn't exist) to `asset` table + 'ALTER TABLE asset ADD COLUMN IF NOT EXISTS package_type TEXT;' + + ), + down: ( + + + // Drop `package_type` column (if exists) from `asset` table + 'ALTER TABLE asset DROP COLUMN IF EXISTS package_type;' + + ) + } + +}; + +const { up } = driver && sql[driver]; +const { down } = driver && sql[driver]; + +exports.up = db => up ? db.runSql(up) : null; +exports.down = db => down ? db.runSql(down) : null;