139 lines
2.5 KiB
JavaScript
139 lines
2.5 KiB
JavaScript
|
|
'use strict';
|
||
|
|
|
||
|
|
const { Service } = require('ee-core');
|
||
|
|
const Storage = require('ee-core/storage');
|
||
|
|
const _ = require('lodash');
|
||
|
|
const path = require('path');
|
||
|
|
|
||
|
|
/**
|
||
|
|
* json数据存储
|
||
|
|
* @class
|
||
|
|
*/
|
||
|
|
class JsondbService extends Service {
|
||
|
|
|
||
|
|
constructor (ctx) {
|
||
|
|
super(ctx);
|
||
|
|
|
||
|
|
// jsondb数据库
|
||
|
|
this.jsonFile = 'demo';
|
||
|
|
this.demoDB = Storage.connection(this.jsonFile);
|
||
|
|
this.demoDBKey = {
|
||
|
|
test_data: 'test_data'
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
* 增 Test data
|
||
|
|
*/
|
||
|
|
async addTestData(user) {
|
||
|
|
const key = this.demoDBKey.test_data;
|
||
|
|
if (!this.demoDB.db.has(key).value()) {
|
||
|
|
this.demoDB.db.set(key, []).write();
|
||
|
|
}
|
||
|
|
|
||
|
|
const data = this.demoDB.db
|
||
|
|
.get(key)
|
||
|
|
.push(user)
|
||
|
|
.write();
|
||
|
|
|
||
|
|
return data;
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
* 删 Test data
|
||
|
|
*/
|
||
|
|
async delTestData(name = '') {
|
||
|
|
const key = this.demoDBKey.test_data;
|
||
|
|
const data = this.demoDB.db
|
||
|
|
.get(key)
|
||
|
|
.remove({name: name})
|
||
|
|
.write();
|
||
|
|
|
||
|
|
return data;
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
* 改 Test data
|
||
|
|
*/
|
||
|
|
async updateTestData(name= '', age = 0) {
|
||
|
|
const key = this.demoDBKey.test_data;
|
||
|
|
const data = this.demoDB.db
|
||
|
|
.get(key)
|
||
|
|
.find({name: name}) // 修改找到的第一个数据,貌似无法批量修改 todo
|
||
|
|
.assign({age: age})
|
||
|
|
.write();
|
||
|
|
|
||
|
|
return data;
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
* 查 Test data
|
||
|
|
*/
|
||
|
|
async getTestData(age = 0) {
|
||
|
|
const key = this.demoDBKey.test_data;
|
||
|
|
let data = this.demoDB.db
|
||
|
|
.get(key)
|
||
|
|
//.find({age: age}) 查找单个
|
||
|
|
.filter(function(o) {
|
||
|
|
let isHas = true;
|
||
|
|
isHas = age === o.age ? true : false;
|
||
|
|
return isHas;
|
||
|
|
})
|
||
|
|
//.orderBy(['age'], ['name']) 排序
|
||
|
|
//.slice(0, 10) 分页
|
||
|
|
.value();
|
||
|
|
|
||
|
|
if (_.isEmpty(data)) {
|
||
|
|
data = []
|
||
|
|
}
|
||
|
|
|
||
|
|
return data;
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
* all Test data
|
||
|
|
*/
|
||
|
|
async getAllTestData() {
|
||
|
|
const key = this.demoDBKey.test_data;
|
||
|
|
if (!this.demoDB.db.has(key).value()) {
|
||
|
|
this.demoDB.db.set(key, []).write();
|
||
|
|
}
|
||
|
|
let data = this.demoDB.db
|
||
|
|
.get(key)
|
||
|
|
.value();
|
||
|
|
|
||
|
|
if (_.isEmpty(data)) {
|
||
|
|
data = []
|
||
|
|
}
|
||
|
|
|
||
|
|
return data;
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
* get data dir (sqlite)
|
||
|
|
*/
|
||
|
|
async getDataDir() {
|
||
|
|
const dir = this.demoDB.getStorageDir();
|
||
|
|
|
||
|
|
return dir;
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
* set custom data dir (sqlite)
|
||
|
|
*/
|
||
|
|
async setCustomDataDir(dir) {
|
||
|
|
if (_.isEmpty(dir)) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// the absolute path of the db file
|
||
|
|
const dbFile = path.join(dir, this.jsonFile);
|
||
|
|
this.demoDB = Storage.connection(dbFile);
|
||
|
|
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
JsondbService.toString = () => '[class JsondbService]';
|
||
|
|
module.exports = JsondbService;
|