OSDN Git Service

[DEBUG] db.existDirectory() modify to search recursively.
[eos/zephyr.git] / server / class / DB.js
index 8157809..f809ebe 100644 (file)
@@ -28,9 +28,9 @@ function DB() {
             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);
@@ -40,6 +40,9 @@ function DB() {
                     sayHello: function() {
                         return test;
                     },
+                    getDirectoryParentId: getDirectoryParentId,
+                    getDirectoryId: getDirectoryId,
+                    getDirectory: getDirectory,
                     existFile: existFile,
                     notExistFile: notExistFile,
                     existDirectory: existDirectory,
@@ -47,7 +50,8 @@ function DB() {
                     createFile: createFile,
                     removeFile: removeFile,
                     createDirectory: createDirectory,
-                    test1: test1
+                    test1: test1,
+                    test2: test2
                     /*
                        removeDirectory: removeDirectory,
                        getFilename: getFilename,
@@ -60,13 +64,92 @@ function DB() {
         });
     }
 
-    
+    /**
+     * 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) {
@@ -125,19 +208,29 @@ function DB() {
      */
     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.'));
             });
         });
     }
@@ -261,13 +354,49 @@ function DB() {
         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}
@@ -297,9 +426,9 @@ function DB() {
             field: 'name',
             allowNull: false
         },
-        parentDirectory: {
-            type: Sequelize.STRING,
-            field: 'parent_directory',
+        parentId: {
+            type: Sequelize.UUID,
+            field: 'parent_id',
             allowNull: false
         },
         fileType: {