OSDN Git Service

[Bugfix] checkFile() adding "fileType: 1" to inner query.
[eos/zephyr.git] / server / class / DB.js
1 /**
2  * DBを操作するクラス
3  *
4  * @returns {object}
5  */
6 function DB() {
7     'use strict';
8
9     var fs = require('fs');
10     var Sequelize = require('sequelize');
11     var co = require('co');
12     var uuid = require('node-uuid');
13
14     var sequelize;
15     var test = 'hello';
16
17     var dbOption = {
18         dialect: 'sqlite'
19     };
20
21     /**
22      * sync
23      *
24      * @returns {promise}<DBオブジェクトの関数群のオブジェクトをresolveする>
25      */
26     function sync() {
27         return new Promise(function(resolve) {
28             Files.sync()
29             .then(function() {
30                 var root = {
31                     fileId: uuid.v1(),
32                     name: '/',
33                     parentDirectory: '',
34                     fileType: 0
35                 };
36                 return Files.create(root);
37             })
38             .then(function() {
39                 var c = {
40                     sayHello: function() {
41                         return test;
42                     },
43                     createFile: createFile,
44                     checkFile: checkFile
45                     /*
46                     removeFile: removeFile,
47                     createDirectory: createDirectory,
48                     removeDirectory: removeDirectory,
49                     getFilename: getFilename,
50                     moveFile: moveFile,
51                     moveDirectory: moveDirectory
52                     */
53                 };
54                 resolve(c);
55             });
56         });
57     }
58
59     /**
60      * createFile
61      *
62      * @param fileName 
63      * @param parentDirectory
64      * @returns {promise}<sequelize.createの結果を格納したobject | Error>
65      */
66     function createFile(fileName,parentDirectory) {
67         return new Promise(function(resolve, reject) {
68             var q = {
69                 where: {
70                     name: parentDirectory,
71                     fileType: 0 
72                 }
73             };
74             Files.findOne(q) 
75             .then(function(r) {
76                if(r === null) {
77                     return Promise.reject(new Error('parentDirectory doesn\'t exist.'));
78                }
79             })
80             .then(function() {
81                 var q = {
82                     fileId: uuid.v1(),
83                     name: fileName,
84                     parentDirectory: parentDirectory,
85                     fileType: 1 
86                 }
87                 return Files.create(q)
88             })
89             .catch(function(error) {
90                 reject(error);
91             })
92             .then(function(r) {
93                 resolve(r);
94             });
95         });
96     }
97
98     /**
99      * checkFile
100      * 同一ディレクトリに同名のファイルが存在するかどうか調べる
101      * @param {string}fileName
102      * @param {string}parentDirectory
103      * @returns {promise}
104      */
105     function checkFile(fileName, parentDirectory) {
106         return new Promise(function(resolve, reject) {
107            var q = {
108                where: {
109                    name: fileName,
110                    parentDirectory: parentDirectory,
111                    fileType: 1 
112                 }
113            };
114            Files.findOne(q)
115            .then(function(r) {
116                 if(r.dataValues) {
117                     reject(new Error('parentDirectory doesn\'t exist.'));
118                 } else {
119                     resolve();
120                 }
121            });
122         });
123     }
124
125     function checkDirectory(directory) {
126     }
127
128     /**
129      * 
130      * @constructor
131      * @returns {promise}
132      */
133     if(process.env['NODE_ENV'] === 'production') {
134         var dbPath = __dirname + '/../../user-specific-files/db/db.workspace';
135         dbOption.storage = dbPath;
136
137         // if doesn't exist workspace.db, create.
138         try {
139             fs.accessSync(dbPath, fs.R_OK | fs.W_OK);
140         } catch(e) {
141             fs.writeFileSync(dbPath, '');
142         }
143     }
144
145     sequelize = new Sequelize('','','', dbOption);
146
147     var Files = sequelize.define('file', {
148         fileId: {
149             type: Sequelize.UUID,
150             field: 'file_id',
151             primaryKey: true
152         },
153         name: {
154             type: Sequelize.STRING,
155             field: 'name',
156             allowNull: false
157         },
158         parentDirectory: {
159             type: Sequelize.STRING,
160             field: 'parent_directory',
161             allowNull: false
162         },
163         fileType: {
164             type: Sequelize.ENUM(0,1),
165             field: 'file_type',
166             allowNull: false
167         }
168     });
169
170     return sync();
171 }
172
173 module.exports = DB;