ming_node 2.2.3 → 2.2.5
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +1 -1
- package/beforeTest/ApiCloudBaseRpcApiTest.js +17 -0
- package/beforeTest/FileBaseRpcApiTest.js +8 -0
- package/beforeTest/MemorDbTest.js +16 -0
- package/beforeTest/MemoryBaseRestApiTest.js +8 -0
- package/beforeTest/MemoryBaseRpcApiTest.js +8 -0
- package/beforeTest/MiApiCloudClientTest.js +16 -0
- package/beforeTest/MongoDbBaseRestApiTest.js +19 -0
- package/beforeTest/MongoDbBaseRpcApiTest.js +19 -0
- package/beforeTest/MySqlBaseRestApiTest.js +13 -0
- package/beforeTest/MysqlBaseRpcApiTest.js +18 -0
- package/beforeTest/graphql_test.js +12 -0
- package/index.js +99 -28
- package/ming_node.md +4 -4
- package/module/BaseMapper.js +20 -4
- package/module/MemoryDb.js +136 -0
- package/module/MiApiCloudClient.js +649 -0
- package/package.json +1 -1
- package/plugins/BaseGraphqlApi/getGraphqlSchema.js +73 -0
- package/plugins/BaseGraphqlApi/getGraphqlSchemaDemo.js +76 -0
- package/plugins/BaseGraphqlApi/index.js +18 -0
- package/plugins/BaseRestApi/AbstractBaseRestApi.js +59 -0
- package/plugins/BaseRestApi/ApiCloudBaseRestApi.js +56 -0
- package/plugins/BaseRestApi/FileBaseRestApi.js +62 -0
- package/plugins/BaseRestApi/MemoryBaseRestApi.js +50 -0
- package/plugins/BaseRestApi/MongoDbBaseRestApi.js +75 -0
- package/plugins/BaseRestApi/MysqlBaseRestApi.js +72 -0
- package/plugins/BaseRpcApi/AbstractBaseRpcApi.js +72 -0
- package/plugins/BaseRpcApi/ApiCloudBaseRpcApi.js +56 -0
- package/plugins/BaseRpcApi/FileBaseRpcApi.js +62 -0
- package/plugins/BaseRpcApi/MemoryBaseRpcApi.js +50 -0
- package/plugins/BaseRpcApi/MongoDbBaseRpcApi.js +75 -0
- package/plugins/BaseRpcApi/MysqlBaseRpcApi.js +72 -0
- package/utils/common/CollectionUtils.js +28 -0
- package/beforeTest/t1.js +0 -18
@@ -0,0 +1,73 @@
|
|
1
|
+
M=require("../../index");
|
2
|
+
const Db=M.getMySql({});
|
3
|
+
const{
|
4
|
+
GraphQLObjectType,
|
5
|
+
GraphQLString,
|
6
|
+
GraphQLInt,
|
7
|
+
GraphQLSchema,
|
8
|
+
GraphQLList,
|
9
|
+
GraphQLNonNull
|
10
|
+
} = require('graphql');
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
function getGraphqlSchema({dbBaseMapper}){
|
16
|
+
const ResponseType = new GraphQLObjectType({
|
17
|
+
name:'response',
|
18
|
+
fields:{
|
19
|
+
status:{type:GraphQLInt},
|
20
|
+
msg:{type:GraphQLString}
|
21
|
+
}
|
22
|
+
})
|
23
|
+
|
24
|
+
const qlObjectType = new GraphQLObjectType({
|
25
|
+
name:'person',
|
26
|
+
fields:{
|
27
|
+
id:{type:GraphQLInt},
|
28
|
+
name:{type:GraphQLString}
|
29
|
+
}
|
30
|
+
})
|
31
|
+
|
32
|
+
const RootQuery = new GraphQLObjectType({
|
33
|
+
name:'personQuery',
|
34
|
+
fields:{
|
35
|
+
person:{
|
36
|
+
type: new GraphQLList(qlObjectType),
|
37
|
+
args:{
|
38
|
+
id:{type:GraphQLInt},
|
39
|
+
name:{type:GraphQLString}
|
40
|
+
},
|
41
|
+
async resolve(parentValue,args){
|
42
|
+
return Db.doSql(`select * from person`);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
}
|
46
|
+
})
|
47
|
+
|
48
|
+
var mutation = new GraphQLObjectType({
|
49
|
+
name:"Mutation",
|
50
|
+
fields:{
|
51
|
+
addPerson:{
|
52
|
+
type:ResponseType,
|
53
|
+
args:{
|
54
|
+
name:{type:GraphQLString}
|
55
|
+
},
|
56
|
+
async resolve(parenValue,args){
|
57
|
+
//await personDao.insert(args.name)
|
58
|
+
return {status:0,msg:"ok"}
|
59
|
+
}
|
60
|
+
}
|
61
|
+
}
|
62
|
+
|
63
|
+
})
|
64
|
+
const schema = new GraphQLSchema({
|
65
|
+
query: RootQuery,
|
66
|
+
mutation: mutation
|
67
|
+
})
|
68
|
+
return schema;
|
69
|
+
}
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
module.exports=getGraphqlSchema;
|
@@ -0,0 +1,76 @@
|
|
1
|
+
M=require("../../index")
|
2
|
+
|
3
|
+
const{
|
4
|
+
GraphQLObjectType,
|
5
|
+
GraphQLString,
|
6
|
+
GraphQLInt,
|
7
|
+
GraphQLSchema,
|
8
|
+
GraphQLList,
|
9
|
+
GraphQLNonNull
|
10
|
+
} = require('graphql');
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
function getGraphqlSchema({dbBaseMapper}){
|
16
|
+
|
17
|
+
const ResponseType = new GraphQLObjectType({
|
18
|
+
name:'response',
|
19
|
+
fields:{
|
20
|
+
status:{type:GraphQLInt},
|
21
|
+
msg:{type:GraphQLString}
|
22
|
+
}
|
23
|
+
})
|
24
|
+
|
25
|
+
const qlObjectType = new GraphQLObjectType({
|
26
|
+
name:'person',
|
27
|
+
fields:{
|
28
|
+
id:{type:GraphQLInt},
|
29
|
+
name:{type:GraphQLString}
|
30
|
+
}
|
31
|
+
})
|
32
|
+
|
33
|
+
const RootQuery = new GraphQLObjectType({
|
34
|
+
name:'personQuery',
|
35
|
+
fields:{
|
36
|
+
person:{
|
37
|
+
type: new GraphQLList(qlObjectType),
|
38
|
+
args:{
|
39
|
+
id:{type:GraphQLInt},
|
40
|
+
name:{type:GraphQLString}
|
41
|
+
},
|
42
|
+
async resolve(parentValue,args){
|
43
|
+
return Db.doSql(`select * from person`);
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
47
|
+
})
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
var mutation = new GraphQLObjectType({
|
52
|
+
name:"Mutation",
|
53
|
+
fields:{
|
54
|
+
addPerson:{
|
55
|
+
type:ResponseType,
|
56
|
+
args:{
|
57
|
+
name:{type:GraphQLString}
|
58
|
+
},
|
59
|
+
async resolve(parenValue,args){
|
60
|
+
//await personDao.insert(args.name)
|
61
|
+
return {status:0,msg:"ok"}
|
62
|
+
}
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
})
|
67
|
+
const schema = new GraphQLSchema({
|
68
|
+
query: RootQuery,
|
69
|
+
mutation: mutation
|
70
|
+
})
|
71
|
+
return schema;
|
72
|
+
}
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
module.exports=getGraphqlSchema;
|
@@ -0,0 +1,18 @@
|
|
1
|
+
var getGraphqlSchema= require("./getGraphqlSchema")
|
2
|
+
const { graphqlHTTP } = require('express-graphql')
|
3
|
+
|
4
|
+
class BaseGraphqlApi{
|
5
|
+
constructor({dbBaseMapper,prefix}) {
|
6
|
+
this.dbBaseMapper=dbBaseMapper;
|
7
|
+
this.tableName=dbBaseMapper.tableName;
|
8
|
+
this.prefix=prefix?prefix:tableName;
|
9
|
+
}
|
10
|
+
install(app,args){
|
11
|
+
let schema= getGraphqlSchema( this.dbBaseMapper)
|
12
|
+
app.mapping(`/${this.prefix}`,graphqlHTTP({
|
13
|
+
schema:schema,
|
14
|
+
graphiql:true
|
15
|
+
}))
|
16
|
+
}
|
17
|
+
}
|
18
|
+
module.exports = BaseGraphqlApi;
|
@@ -0,0 +1,59 @@
|
|
1
|
+
const M=require("../../index");
|
2
|
+
|
3
|
+
class AbstractBaseRest{
|
4
|
+
|
5
|
+
constructor({tableName,prefix,generateTime=false}) {
|
6
|
+
this.tableName=tableName;
|
7
|
+
this.prefix=prefix?prefix:tableName;
|
8
|
+
this.generateTime=generateTime;
|
9
|
+
}
|
10
|
+
|
11
|
+
async add(obj){}
|
12
|
+
async delete(obj){}
|
13
|
+
async list({page,num,...queryCase}){}
|
14
|
+
async listAll(obj){}
|
15
|
+
async update(obj){}
|
16
|
+
async getChildenList(id,queryCase){}
|
17
|
+
|
18
|
+
install(app,args){
|
19
|
+
app.post(`${this.prefix}`,async (req,res)=>{
|
20
|
+
const params=req.params;
|
21
|
+
if(this.generateTime){
|
22
|
+
params.gmt_create=new Date();
|
23
|
+
}
|
24
|
+
let r=await this.add(params)
|
25
|
+
res.send(M.successResult(r));
|
26
|
+
})
|
27
|
+
app.delete(`${this.prefix}`,async (req,res)=>{
|
28
|
+
let r=await this.delete(req.params);
|
29
|
+
res.send(M.successResult(r));
|
30
|
+
});
|
31
|
+
|
32
|
+
/**
|
33
|
+
* 修改
|
34
|
+
*/
|
35
|
+
app.put(`${this.prefix}`,async (req,res)=>{
|
36
|
+
const params=req.params;
|
37
|
+
if(this.generateTime){
|
38
|
+
params.gmt_modified=new Date();
|
39
|
+
}
|
40
|
+
await this.update(params);
|
41
|
+
res.send(M.successResult());
|
42
|
+
});
|
43
|
+
|
44
|
+
app.get(`${this.prefix}/:id`,async (req,res)=>{
|
45
|
+
const {id,page,num,...queryCase}=req.params;
|
46
|
+
if(id==undefined){
|
47
|
+
let r=await this.list({page,num,queryCase});
|
48
|
+
res.send(M.successResult(r));
|
49
|
+
}else {
|
50
|
+
let r=await this.getById(req.params.id);
|
51
|
+
res.send(M.successResult(r));
|
52
|
+
}
|
53
|
+
});
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
module.exports = AbstractBaseRest;
|
@@ -0,0 +1,56 @@
|
|
1
|
+
/**
|
2
|
+
* 数据源为内存的rpc风格接口
|
3
|
+
*/
|
4
|
+
const AbstractBaseRestApi=require("./AbstractBaseRestApi");
|
5
|
+
|
6
|
+
|
7
|
+
class ApiCloudBaseRestApi extends AbstractBaseRestApi{
|
8
|
+
constructor(props) {
|
9
|
+
super(props);
|
10
|
+
this.appid=props.appid;
|
11
|
+
this.appkey=props.appkey;
|
12
|
+
this.apiCloudClient = props.apiCloudClient;
|
13
|
+
this.tableClient= this.apiCloudClient.tableClient(props.tableName);
|
14
|
+
}
|
15
|
+
async add(obj){
|
16
|
+
let r= await this.tableClient.add(obj);
|
17
|
+
return r;
|
18
|
+
}
|
19
|
+
|
20
|
+
async delete(obj){
|
21
|
+
let r= await this.tableClient.delete(obj);
|
22
|
+
return r;
|
23
|
+
}
|
24
|
+
|
25
|
+
async getById(id){
|
26
|
+
let r=await this.tableClient.list({id},null,null,"sort");
|
27
|
+
return r[0];
|
28
|
+
}
|
29
|
+
|
30
|
+
async list({page=1,num=10,queryCase}){
|
31
|
+
page=Number.parseInt(page);
|
32
|
+
num=Number.parseInt(num);
|
33
|
+
let limit=num;
|
34
|
+
let skip= (page-1)*num
|
35
|
+
let r=await this.tableClient.list(queryCase,limit,skip,"createdAt ASC");
|
36
|
+
return r;
|
37
|
+
}
|
38
|
+
|
39
|
+
async listAll(obj){
|
40
|
+
let r=await this.tableClient.list(obj,null,null,"sort");
|
41
|
+
return r;
|
42
|
+
}
|
43
|
+
|
44
|
+
async update(obj){
|
45
|
+
let r= await this.tableClient.update(obj);
|
46
|
+
return r;
|
47
|
+
}
|
48
|
+
|
49
|
+
async getChildenList(id,caseObj){
|
50
|
+
let r= this.listAll({parent_id:id,...caseObj});
|
51
|
+
return r;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
|
56
|
+
module.exports = ApiCloudBaseRestApi;
|
@@ -0,0 +1,62 @@
|
|
1
|
+
/**
|
2
|
+
* 数据源为内存的rpc风格接口
|
3
|
+
*/
|
4
|
+
const M=require("../../index")
|
5
|
+
const AbstractBaseRestApi=require("./AbstractBaseRestApi");
|
6
|
+
|
7
|
+
class FileBaseRestApi extends AbstractBaseRestApi{
|
8
|
+
constructor(props) {
|
9
|
+
super(props);
|
10
|
+
}
|
11
|
+
async add(obj){
|
12
|
+
obj.id = M.randomStr();
|
13
|
+
M.addObjToFile(this.tableName, obj);
|
14
|
+
return obj;
|
15
|
+
}
|
16
|
+
|
17
|
+
async delete(obj){
|
18
|
+
let r=0;
|
19
|
+
if (obj) {
|
20
|
+
r= M.deleteObjByPropFile(this.tableName, obj);
|
21
|
+
} else {
|
22
|
+
r=M.writeObjToFile(this.tableName,[]);
|
23
|
+
}
|
24
|
+
return r;
|
25
|
+
}
|
26
|
+
|
27
|
+
async getById(id){
|
28
|
+
let r=M.getById(this.tableName,id);
|
29
|
+
return r;
|
30
|
+
}
|
31
|
+
|
32
|
+
async list({page=1,num=10,queryCase}){
|
33
|
+
page=Number.parseInt(page);
|
34
|
+
num=Number.parseInt(num);
|
35
|
+
if (page <= 0) page = 1;
|
36
|
+
let rows =await this.listAll(queryCase);
|
37
|
+
let total = rows.length;
|
38
|
+
rows = rows.splice((page - 1) * num, num)
|
39
|
+
return {rows, total}
|
40
|
+
}
|
41
|
+
|
42
|
+
async listAll(obj){
|
43
|
+
if (obj) {
|
44
|
+
return M.listAllObjByPropFile(this.tableName, obj);
|
45
|
+
} else {
|
46
|
+
return M.getObjByFile(this.tableName);
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
async update(obj){
|
51
|
+
let r= M.updateObjByIdFile(this.tableName,obj);
|
52
|
+
return r;
|
53
|
+
}
|
54
|
+
|
55
|
+
async getChildenList(id,caseObj){
|
56
|
+
let r= this.listAll({parent_id:id,...caseObj});
|
57
|
+
return r;
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
|
62
|
+
module.exports = FileBaseRestApi;
|
@@ -0,0 +1,50 @@
|
|
1
|
+
/**
|
2
|
+
* 数据源为内存的rpc风格接口
|
3
|
+
*/
|
4
|
+
const MemoryDb=require("../../module/MemoryDb");
|
5
|
+
const AbstractBaseRestApi=require("./AbstractBaseRestApi");
|
6
|
+
|
7
|
+
class MemoryBaseRestApi extends AbstractBaseRestApi{
|
8
|
+
|
9
|
+
constructor(props) {
|
10
|
+
super(props);
|
11
|
+
this.memoryDb=new MemoryDb(props.tableName);
|
12
|
+
}
|
13
|
+
async add(obj){
|
14
|
+
let r= this.memoryDb.add(obj);
|
15
|
+
return r;
|
16
|
+
}
|
17
|
+
|
18
|
+
async delete(obj){
|
19
|
+
let r= this.memoryDb.deleteAll(obj);
|
20
|
+
return r;
|
21
|
+
}
|
22
|
+
|
23
|
+
async getById(id){
|
24
|
+
let r=this.memoryDb.getById(id);
|
25
|
+
return r;
|
26
|
+
}
|
27
|
+
|
28
|
+
async list({page,num,queryCase}){
|
29
|
+
let r= this.memoryDb.listByPage(page,num,queryCase);
|
30
|
+
return r;
|
31
|
+
}
|
32
|
+
|
33
|
+
async listAll(obj){
|
34
|
+
let r= this.memoryDb.listAll(obj);
|
35
|
+
return r;
|
36
|
+
}
|
37
|
+
|
38
|
+
async update(obj){
|
39
|
+
let r= this.memoryDb.update(obj);
|
40
|
+
return r;
|
41
|
+
}
|
42
|
+
|
43
|
+
async getChildenList(id,caseObj){
|
44
|
+
let r= this.memoryDb.listAll({parent_id:id,...caseObj});
|
45
|
+
return r;
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
|
50
|
+
module.exports = MemoryBaseRestApi;
|
@@ -0,0 +1,75 @@
|
|
1
|
+
/**
|
2
|
+
* @type {MemoryDb|{}}
|
3
|
+
*/
|
4
|
+
const M=require("../../index");
|
5
|
+
const AbstractBaseRestApi=require("./AbstractBaseRestApi");
|
6
|
+
|
7
|
+
|
8
|
+
class MongoDbBaseRestApi extends AbstractBaseRestApi{
|
9
|
+
constructor(props) {
|
10
|
+
super(props);
|
11
|
+
this.mongoDb=M.mongoDb;
|
12
|
+
}
|
13
|
+
|
14
|
+
async add(obj){
|
15
|
+
let r= this.mongoDb.insert(this.tableName,obj);
|
16
|
+
return r;
|
17
|
+
}
|
18
|
+
|
19
|
+
async delete(obj){
|
20
|
+
let r= this.mongoDb.remove(this.tableName,{
|
21
|
+
_id: M.mongoDb.ObjectID(obj.id)
|
22
|
+
});
|
23
|
+
return r;
|
24
|
+
}
|
25
|
+
|
26
|
+
async getById(id){
|
27
|
+
let r=await this.mongoDb.getById(this.tableName,id);
|
28
|
+
return r;
|
29
|
+
}
|
30
|
+
|
31
|
+
async list({page=1,num=10,queryCase}){
|
32
|
+
page=Number.parseInt(page);
|
33
|
+
num=Number.parseInt(num);
|
34
|
+
let tableName=this.tableName;
|
35
|
+
return new Promise(async (resolve,reject)=>{
|
36
|
+
this.mongoDb.connect().then((db)=>{
|
37
|
+
var result=db.collection(this.tableName).find(queryCase,{
|
38
|
+
skip:(page-1)*num,
|
39
|
+
limit:num
|
40
|
+
});
|
41
|
+
result.toArray(async function(err,docs){
|
42
|
+
if(err){
|
43
|
+
reject(err);
|
44
|
+
return;
|
45
|
+
}
|
46
|
+
let total=await db.collection(tableName).count(queryCase);
|
47
|
+
resolve({rows:docs,total:total});
|
48
|
+
})
|
49
|
+
})
|
50
|
+
})
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
async listAll(obj){
|
55
|
+
let r= this.mongoDb.find(this.tableName,obj);
|
56
|
+
return r;
|
57
|
+
}
|
58
|
+
|
59
|
+
async update(obj){
|
60
|
+
let {id,...newObj}=obj;
|
61
|
+
let r= this.mongoDb.update(this.tableName,{
|
62
|
+
_id: M.mongoDb.ObjectID(id)
|
63
|
+
},newObj);
|
64
|
+
return r;
|
65
|
+
}
|
66
|
+
|
67
|
+
async getChildenList(id,caseObj){
|
68
|
+
let r= this.listAll({parent_id:id,...caseObj});
|
69
|
+
return r;
|
70
|
+
}
|
71
|
+
|
72
|
+
}
|
73
|
+
|
74
|
+
|
75
|
+
module.exports = MongoDbBaseRestApi;
|
@@ -0,0 +1,72 @@
|
|
1
|
+
/**
|
2
|
+
* @type {MemoryDb|{}}
|
3
|
+
*/
|
4
|
+
|
5
|
+
const BaseMapper=require("../../module/BaseMapper");
|
6
|
+
const AbstractBaseRestApi=require("./AbstractBaseRestApi");
|
7
|
+
|
8
|
+
|
9
|
+
class MysqlBaseRestApi extends AbstractBaseRestApi{
|
10
|
+
constructor(props) {
|
11
|
+
super(props);
|
12
|
+
this.dbBaseMapper= new BaseMapper(this.tableName);
|
13
|
+
}
|
14
|
+
|
15
|
+
async add(obj){
|
16
|
+
if(obj.gmt_create){
|
17
|
+
obj.gmt_create=obj.gmt_create.format("yyyy-MM-dd hh:mm:ss");
|
18
|
+
}
|
19
|
+
let r= this.dbBaseMapper.insert(obj);
|
20
|
+
return r;
|
21
|
+
}
|
22
|
+
|
23
|
+
async delete(obj){
|
24
|
+
let r= this.dbBaseMapper.delete(obj);
|
25
|
+
return r;
|
26
|
+
}
|
27
|
+
|
28
|
+
async getById(id){
|
29
|
+
let r=await this.dbBaseMapper.selectById({id});
|
30
|
+
return r;
|
31
|
+
}
|
32
|
+
|
33
|
+
async list({page,num,queryCase}){
|
34
|
+
let queryCaseStr= MysqlBaseRestApi.obj2QueryCase(queryCase);
|
35
|
+
let r= this.dbBaseMapper.selectPage({page,num,queryCase:queryCaseStr});
|
36
|
+
return r;
|
37
|
+
}
|
38
|
+
|
39
|
+
async listAll(obj){
|
40
|
+
let queryCase= MysqlBaseRestApi.obj2QueryCase(obj);
|
41
|
+
let r= this.dbBaseMapper.selectList({queryCase:queryCase});
|
42
|
+
return r;
|
43
|
+
}
|
44
|
+
|
45
|
+
async update(obj){
|
46
|
+
if(obj.gmt_modified){
|
47
|
+
obj.gmt_modified=obj.gmt_modified.format("yyyy-MM-dd hh:mm:ss");
|
48
|
+
}
|
49
|
+
let {id,...newObj}=obj;
|
50
|
+
let r= this.dbBaseMapper.update(newObj,`id=${id}`);
|
51
|
+
return r;
|
52
|
+
}
|
53
|
+
|
54
|
+
async getChildenList(id,caseObj){
|
55
|
+
let r= this.listAll({parent_id:id,...caseObj});
|
56
|
+
return r;
|
57
|
+
}
|
58
|
+
|
59
|
+
static obj2QueryCase(obj){
|
60
|
+
let queryCase="1=1";
|
61
|
+
if(obj && Object.keys(obj).length>0){
|
62
|
+
for(var p in obj) {
|
63
|
+
queryCase=queryCase+` and ${p}='${obj[p]}' `
|
64
|
+
}
|
65
|
+
}
|
66
|
+
return queryCase;
|
67
|
+
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
|
72
|
+
module.exports = MysqlBaseRestApi;
|
@@ -0,0 +1,72 @@
|
|
1
|
+
const CollectionUtils=require("../../utils/common/CollectionUtils");
|
2
|
+
const M=require("../../index");
|
3
|
+
|
4
|
+
class AbstractBaseRpcApi{
|
5
|
+
|
6
|
+
constructor({tableName,prefix,generateTime=false}) {
|
7
|
+
this.tableName=tableName;
|
8
|
+
this.prefix=prefix?prefix:tableName;
|
9
|
+
this.generateTime=generateTime;
|
10
|
+
}
|
11
|
+
|
12
|
+
async add(obj){}
|
13
|
+
async delete(obj){}
|
14
|
+
async list({page,num,...queryCase}){}
|
15
|
+
async listAll(obj){}
|
16
|
+
async update(obj){}
|
17
|
+
async getChildenList(id,queryCase){}
|
18
|
+
|
19
|
+
install(app,args){
|
20
|
+
app.post(`${this.prefix}/add`,async (req,res)=>{
|
21
|
+
const params=req.params;
|
22
|
+
if(this.generateTime){
|
23
|
+
params.gmt_create=new Date();
|
24
|
+
}
|
25
|
+
let r=await this.add(params)
|
26
|
+
res.send(M.successResult(r));
|
27
|
+
})
|
28
|
+
app.post(`${this.prefix}/delete`,async (req,res)=>{
|
29
|
+
let r=await this.delete(req.params);
|
30
|
+
res.send(M.successResult(r));
|
31
|
+
});
|
32
|
+
|
33
|
+
app.post(`${this.prefix}/update`,async (req,res)=>{
|
34
|
+
const params=req.params;
|
35
|
+
if(this.generateTime){
|
36
|
+
params.gmt_modified=new Date();
|
37
|
+
}
|
38
|
+
await this.update(params);
|
39
|
+
res.send(M.successResult());
|
40
|
+
});
|
41
|
+
|
42
|
+
app.get(`${this.prefix}/getById`,async (req,res)=>{
|
43
|
+
let r=await this.getById(req.params.id);
|
44
|
+
res.send(M.successResult(r));
|
45
|
+
});
|
46
|
+
|
47
|
+
app.get(`${this.prefix}/listAll`,async (req,res)=>{
|
48
|
+
const params=req.params;
|
49
|
+
let r=await this.listAll(params);
|
50
|
+
res.send(M.successResult(r));
|
51
|
+
});
|
52
|
+
|
53
|
+
app.get(`${this.prefix}/list`,async (req,res)=>{
|
54
|
+
const {page,num,...queryCase}=req.params;
|
55
|
+
let r=await this.list({page,num,queryCase});
|
56
|
+
res.send(M.successResult(r));
|
57
|
+
})
|
58
|
+
|
59
|
+
/**
|
60
|
+
* 如果有parent_id才能返回树
|
61
|
+
*/
|
62
|
+
app.get(`${this.prefix}/tree`,async (req,res)=>{
|
63
|
+
const {parent_id,...queryCase}=req.params;
|
64
|
+
let r=await CollectionUtils.selectTree(this.getChildenList.bind(this), parent_id,queryCase);
|
65
|
+
res.send(M.successResult(r));
|
66
|
+
})
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
module.exports = AbstractBaseRpcApi;
|
@@ -0,0 +1,56 @@
|
|
1
|
+
/**
|
2
|
+
* 数据源为内存的rpc风格接口
|
3
|
+
*/
|
4
|
+
const AbstractBaseRpcApi=require("./AbstractBaseRpcApi");
|
5
|
+
|
6
|
+
|
7
|
+
class ApiCloudBaseRpcApi extends AbstractBaseRpcApi{
|
8
|
+
constructor(props) {
|
9
|
+
super(props);
|
10
|
+
this.appid=props.appid;
|
11
|
+
this.appkey=props.appkey;
|
12
|
+
this.apiCloudClient = props.apiCloudClient;
|
13
|
+
this.tableClient= this.apiCloudClient.tableClient(props.tableName);
|
14
|
+
}
|
15
|
+
async add(obj){
|
16
|
+
let r= await this.tableClient.add(obj);
|
17
|
+
return r;
|
18
|
+
}
|
19
|
+
|
20
|
+
async delete(obj){
|
21
|
+
let r= await this.tableClient.delete(obj);
|
22
|
+
return r;
|
23
|
+
}
|
24
|
+
|
25
|
+
async getById(id){
|
26
|
+
let r=await this.tableClient.list({id},null,null,"sort");
|
27
|
+
return r[0];
|
28
|
+
}
|
29
|
+
|
30
|
+
async list({page=1,num=10,queryCase}){
|
31
|
+
page=Number.parseInt(page);
|
32
|
+
num=Number.parseInt(num);
|
33
|
+
let limit=num;
|
34
|
+
let skip= (page-1)*num
|
35
|
+
let r=await this.tableClient.list(queryCase,limit,skip,"createdAt ASC");
|
36
|
+
return r;
|
37
|
+
}
|
38
|
+
|
39
|
+
async listAll(obj){
|
40
|
+
let r=await this.tableClient.list(obj,null,null,"sort");
|
41
|
+
return r;
|
42
|
+
}
|
43
|
+
|
44
|
+
async update(obj){
|
45
|
+
let r= await this.tableClient.update(obj);
|
46
|
+
return r;
|
47
|
+
}
|
48
|
+
|
49
|
+
async getChildenList(id,caseObj){
|
50
|
+
let r= this.listAll({parent_id:id,...caseObj});
|
51
|
+
return r;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
|
56
|
+
module.exports = ApiCloudBaseRpcApi;
|