OSDN Git Service

arranged testing frame
[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
13     var sequelize;
14
15     var dbOption = {
16         dialect: 'sqlite'
17     };
18
19     function sync() {
20         return new Promise(function(resolve) {
21             Promise.all([Directory.sync(), File.sync()])
22             .then(function() {
23                 var root = {
24                     name: 'root',
25                     parent: ''
26                 };
27                 return Directory.insert(root);
28             })
29             .then(function() {
30                 return {};
31             });
32         });
33     }
34
35     if(process.env['NODE_ENV'] === 'production') {
36         var dbPath = __dirname + '/../../user-specific-files/db/db.workspace';
37         dbOption.storage = dbPath;
38
39         // if doesn't exist workspace.db, create.
40         try {
41             fs.accessSync(dbPath, fs.R_OK | fs.W_OK);
42         } catch(e) {
43             fs.writeFileSync(dbPath, '');
44         }
45     }
46
47     sequelize = new Sequelize('','','', dbOption);
48
49     var File = sequelize.define('file', {
50         fileId: {
51             type: Sequelize.UUID,
52             field: 'file_id',
53             primaryKey: true
54         },
55         name: {
56             type: Sequelize.STRING,
57             field: 'name',
58             allowNull: false
59         },
60         directoryName: {
61             type: Sequelize.STRING,
62             field: 'directory_name',
63             allowNull: false
64         }
65     });
66
67     var Directory = sequelize.define('directory', {
68         name: {
69             type: Sequelize.STRING,
70             field: 'name',
71             primaryKey: true
72         },
73         parent: {
74             type: Sequelize.STRING,
75             field: 'parent',
76             allowNull: false
77         }
78     });
79
80     Directory.hasMany(File, {foreignKey: 'directoryName'});
81     File.belongsTo(Directory, {foreignKey: 'name'});
82
83     return sync();
84 }
85
86 module.exports = DB;