Files.sync()
.then(function() {
var root = {
- fileId: uuid.v1(),
+ fileId: '1f83f620-c1ed-11e5-9657-7942989daa00', // rootのuuidは固定値
name: '/',
- parentDirectory: '',
+ parentId: '',
fileType: 0
};
return Files.create(root);
sayHello: function() {
return test;
},
+ getDirectoryParentId: getDirectoryParentId,
+ getDirectoryId: getDirectoryId,
+ getDirectory: getDirectory,
existFile: existFile,
notExistFile: notExistFile,
existDirectory: existDirectory,
createFile: createFile,
removeFile: removeFile,
createDirectory: createDirectory,
- test1: test1
+ test1: test1,
+ test2: test2
/*
removeDirectory: removeDirectory,
getFilename: getFilename,
});
}
-
+ /**
+ * getDirectoryParentId
+ * ディレクトリのparentIdを取得する
+ * @param name
+ * @returns {promise} ディレクトリが存在すればresolve(uuid), しなければreject
+ */
+ function getDirectoryParentId(name) {
+ return new Promise(function(resolve, reject) {
+ var q = {
+ where: {
+ name: name,
+ fileType: 0
+ }
+ };
+ Files.findAll(q)
+ .then(function(r) {
+ if(r.length === 0) {
+ reject(new Error('"' + name + '" directory doesn\'t exist.'));
+ } else {
+ var map = r.map(function(c) { return c.dataValues.parentId });
+ resolve(map);
+ }
+ });
+ });
+ }
+
+
+ /**
+ * getDirectoryId
+ * ディレクトリのfileIdを取得する
+ * @param name
+ * @returns {promise} ディレクトリが存在すればresolve(uuid), しなければreject
+ */
+
+ function getDirectoryId(name) {
+ return new Promise(function(resolve, reject) {
+ var q = {
+ where: {
+ name: name,
+ fileType: 0
+ }
+ };
+ Files.findAll(q)
+ .then(function(r) {
+ if(r.length === 0) {
+ reject(new Error('"' + name + '" directory doesn\'t exist.'));
+ } else {
+ var map = r.map(function(c) { return c.dataValues.fileId });
+ resolve(map);
+ }
+ });
+ });
+ }
+
+ /**
+ * getDirectory
+ * ディレクトリのfileIdを取得する
+ * @param name
+ * @returns {promise} ディレクトリが存在すればresolve(name), しなければreject
+ */
+
+ function getDirectory(name) {
+ return new Promise(function(resolve, reject) {
+ var q = {
+ where: {
+ name: name,
+ fileType: 0
+ }
+ };
+ Files.findAll(q)
+ .then(function(r) {
+ if(r.length === 0) {
+ reject(new Error('"' + name + '" directory doesn\'t exist.'));
+ } else {
+ var map = r.map(function(c) { return c.dataValues });
+ resolve(map);
+ }
+ });
+ });
+ }
/**
* existFile
* 同一ディレクトリに同名のファイルが存在することを確かめる
- * @param {string}fileName
- * @param {string}parentDirectory
+ * @param {string} fileName
+ * @param {string} parentDirectory parentDirectoryの絶対パス
* @returns {promise} ファイルが存在すればresolve、存在しなければreject
*/
function existFile(fileName, parentDirectory) {
*/
function existDirectory(directory) {
return new Promise(function(resolve, reject) {
- var q = {
- where: {
- name: directory,
- fileType: 0
- }
- };
- Files.findOne(q)
+ var arrayDirectory = directory.split('/');
+ arrayDirectory.shift(); // root
+ arrayDirectory.unshift('/');
+
+ var directoriesPromise = arrayDirectory.map(function(name) {
+ return getDirectory(name);
+ });
+ Promise.all(directoriesPromise)
.then(function(r) {
- if(r === null) {
- reject(new Error('"' + directory + '" directory doesn\'t exist.'));
- } else {
- resolve();
+ var parentId = r[0][0].fileId;
+ var index;
+ for(var i=1;i<r.length;i++) {
+ index = r[i].map(function(c) { return c.parentId }).indexOf(parentId);
+ if(index > -1) {
+ parentId = r[i][index].fileId;
+ } else {
+ reject(new Error('"' + directory + '" directory doesn\'t exist.'));
+ }
}
+ resolve(directory);
+ })
+ .catch(function(error) {
+ reject(new Error('"' + directory + '" directory doesn\'t exist.'));
});
});
}
var q = {
fileId: uuid.v1(),
name: 'hoge.txt',
- parentDirectory: '/',
+ parentId: '1f83f620-c1ed-11e5-9657-7942989daa00', // rootのuuid
fileType: 1
};
return Files.create(q);
}
/**
+ * test2
+ * test用にデータベースのレコードを追加する関数
+ * @returns {promise}
+ */
+
+ function test2() {
+ var q1 = {
+ fileId: uuid.v1(),
+ name: 'one',
+ parentId: '1f83f620-c1ed-11e5-9657-7942989daa00', // rootのuuid
+ fileType: 0
+ };
+ return Files.create(q1)
+ .then(function() {
+ var q2 = {
+ fileId: uuid.v1(),
+ name: 'two',
+ parentId: q1.fileId,
+ fileType: 0
+
+ };
+ return Files.create(q2);
+ })
+ .then(function(r) {
+ var q3 = {
+ fileId: uuid.v1(),
+ name: 'two',
+ parentId: '1f83f620-c1ed-11e5-9657-7942989daa00',
+ fileType: 0
+ };
+ return Files.create(q3);
+ });
+ }
+
+
+ /**
*
* @constructor
* @returns {promise}
field: 'name',
allowNull: false
},
- parentDirectory: {
- type: Sequelize.STRING,
- field: 'parent_directory',
+ parentId: {
+ type: Sequelize.UUID,
+ field: 'parent_id',
allowNull: false
},
fileType: {