Skip to content
This repository was archived by the owner on Oct 27, 2020. It is now read-only.

Commit be54a04

Browse files
committed
v1.0.3 - [BUGFIX] Drop files in chunk
1 parent 0269eae commit be54a04

File tree

3 files changed

+64
-24
lines changed

3 files changed

+64
-24
lines changed

lib/index.js

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
var Busboy, DataSource, Grid, GridFS, MongoStorage, ObjectID, Promise, _, debug, generateUrl, mongodb;
1+
var Busboy, DataSource, Grid, GridFS, MongoStorage, ObjectID, Promise, _, async, debug, generateUrl, mongodb;
22

33
_ = require('lodash');
44

5+
async = require('async');
6+
57
Busboy = require('busboy');
68

79
DataSource = require('loopback-datasource-juggler').DataSource;
@@ -93,10 +95,16 @@ MongoStorage = (function() {
9395
};
9496

9597
MongoStorage.prototype.destroyContainer = function(name, callback) {
96-
return this.db.collection('fs.files').remove({
97-
'metadata.mongo-storage': true,
98-
'metadata.container': name
99-
}, callback);
98+
var self;
99+
self = this;
100+
return self.getFiles(name, function(err, files) {
101+
if (err) {
102+
return callback(err);
103+
}
104+
return async.each(files, function(file, done) {
105+
return self.removeFileById(file._id, done);
106+
}, callback);
107+
});
100108
};
101109

102110
MongoStorage.prototype.upload = function(container, req, res, callback) {
@@ -160,15 +168,32 @@ MongoStorage = (function() {
160168
};
161169

162170
MongoStorage.prototype.removeFile = function(container, filename, callback) {
163-
return this.db.collection('fs.files').remove({
164-
'metadata.mongo-storage': true,
165-
'metadata.container': container,
166-
'metadata.filename': filename
167-
}, function(err) {
168-
return callback(err);
171+
var self;
172+
self = this;
173+
return self.getFile(container, filename, function(err, file) {
174+
if (err) {
175+
return callback(err);
176+
}
177+
return self.removeFileById(file._id, callback);
169178
});
170179
};
171180

181+
MongoStorage.prototype.removeFileById = function(id, callback) {
182+
var self;
183+
self = this;
184+
return async.parallel([
185+
function(done) {
186+
return self.db.collection('fs.chunks').remove({
187+
files_id: id
188+
}, done);
189+
}, function(done) {
190+
return self.db.collection('fs.files').remove({
191+
_id: id
192+
}, done);
193+
}
194+
], callback);
195+
};
196+
172197
MongoStorage.prototype.getFile = function(container, filename, callback) {
173198
return this.db.collection('fs.files').findOne({
174199
'metadata.mongo-storage': true,

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "loopback-component-storage-mongo",
3-
"version": "1.0.2",
3+
"version": "1.0.3",
44
"description": "",
55
"main": "lib/index.js",
66
"scripts": {
@@ -21,6 +21,7 @@
2121
"author": "Jérémie Drouet <jeremie.drouet@gmail.com>",
2222
"license": "ISC",
2323
"dependencies": {
24+
"async": "^1.5.2",
2425
"bluebird": "^3.0.6",
2526
"busboy": "^0.2.11",
2627
"debug": "^2.2.0",

source/index.coffee

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
_ = require 'lodash'
2+
async = require 'async'
23
Busboy = require 'busboy'
34
DataSource = require('loopback-datasource-juggler').DataSource
45
debug = require('debug') 'loopback:storage:mongo'
@@ -65,11 +66,12 @@ class MongoStorage
6566
files: files
6667

6768
destroyContainer: (name, callback) ->
68-
@db.collection 'fs.files'
69-
.remove
70-
'metadata.mongo-storage': true
71-
'metadata.container': name
72-
, callback
69+
self = @
70+
self.getFiles name, (err, files) ->
71+
return callback err if err
72+
async.each files, (file, done) ->
73+
self.removeFileById file._id, done
74+
, callback
7375

7476
upload: (container, req, res, callback) ->
7577
self = @
@@ -113,13 +115,25 @@ class MongoStorage
113115
return callback err, files
114116

115117
removeFile: (container, filename, callback) ->
116-
@db.collection 'fs.files'
117-
.remove
118-
'metadata.mongo-storage': true
119-
'metadata.container': container
120-
'metadata.filename': filename
121-
, (err) ->
122-
return callback err
118+
self = @
119+
self.getFile container, filename, (err, file) ->
120+
return callback err if err
121+
self.removeFileById file._id, callback
122+
123+
removeFileById: (id, callback) ->
124+
self = @
125+
async.parallel [
126+
(done) ->
127+
self.db.collection 'fs.chunks'
128+
.remove
129+
files_id: id
130+
, done
131+
(done) ->
132+
self.db.collection 'fs.files'
133+
.remove
134+
_id: id
135+
, done
136+
], callback
123137

124138
getFile: (container, filename, callback) ->
125139
@db.collection 'fs.files'

0 commit comments

Comments
 (0)