@qingfu/core-env 0.1.37 → 0.1.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/database.js CHANGED
@@ -16,6 +16,7 @@ if ( process.env.DATABASE_URI ) {
16
16
  mongoose.plugin( leanGetters );
17
17
  mongoose.plugin( castAggregate );
18
18
  mongoose.summaryPlugin = summaryPlugin;
19
+ mongoose.statisticsPlugin = statisticsPlugin;
19
20
  mongoose.batchPlugin = batchPlugin;
20
21
  mongoose.qrcodePlugin = qrcodePlugin;
21
22
 
@@ -67,6 +68,35 @@ function summaryPlugin( schema, options = {}) {
67
68
  };
68
69
  }
69
70
 
71
+ function statisticsPlugin( schema, options = {}) {
72
+ let { timeFields = [], valueFields = [], forbidsFields = [] } = options;
73
+ schema.statics.statistics = async function( query = {}, opts = {}) {
74
+ let { group = null, first = null, format = '%Y-%m-%d', timezone = process.env.TZ } = opts;
75
+ if ( _.isObject( group )) throw new Error( 422 );
76
+ if ( forbidsFields.some( v => _.includes( group, v ))) throw new Error( 422 );
77
+ if ( forbidsFields.some( v => _.includes( first, v ))) throw new Error( 422 );
78
+ if ( _.isString( group )) {
79
+ let keys = group.split( /\s+/ ).map( v => _.trimStart( v, '$' ));
80
+ let trans0 = v => v.replace( '.', '-' );
81
+ let trans1 = v => !timeFields.includes( v ) ? '$' + v :
82
+ { '$dateToString': { date: '$' + v, format, timezone }};
83
+ group = keys.length === 1 ? trans1( keys[ 0 ]) :
84
+ _.zipObject( keys.map( trans0 ), keys.map( trans1 ));
85
+ }
86
+ let $group = { _id: group, count: { $sum: 1 }}, defaultRes = { count: 0 };
87
+ valueFields.forEach( v => {
88
+ $group[ v ] = { $sum: '$' + v };
89
+ defaultRes[ v ] = 0;
90
+ });
91
+ if ( _.isString( first )) {
92
+ let keys = first.split( /\s+/ ).map( v => _.trimStart( v, '$' ));
93
+ keys.forEach( v => { $group[ v ] = { $first: '$' + v }; });
94
+ }
95
+ let results = await this.aggregate([{ $match: query }, { $group }]);
96
+ return group && results || results.length && _.omit( results[ 0 ], '_id' ) || defaultRes;
97
+ };
98
+ }
99
+
70
100
  function batchPlugin( schema ) {
71
101
  schema.statics.pathCreate = async function({ query, update, path, subpath, data }) {
72
102
  if ( _.isEmpty( query ) || !path || !subpath || !data ) throw new Error( 422 );
package/lib/helper.js CHANGED
@@ -96,32 +96,6 @@ helper.parseLike = ( ...fields ) => {
96
96
  };
97
97
  };
98
98
 
99
- helper.checkRestrict = async ( ctx, next ) => {
100
- let scene = ctx.state.user ? ctx.state.user.id : ctx.ip;
101
- let count = await brokers( 'core' ).call( 'check.count', scene );
102
- if ( count > 50 ) return ctx.throw( 429 );
103
- try {
104
- await next();
105
- } catch ( err ) {
106
- await brokers( 'core' ).call( 'check.increase', scene );
107
- throw err;
108
- }
109
- };
110
-
111
- helper.validatePassword = async ( ctx, next ) => {
112
- let userID = ctx.state.user.id, password = ctx.header.password;
113
- if ( !password ) return ctx.throw( 428, 'PASSWORD_REQUIRED' );
114
- let count = await brokers( 'core' ).call( 'check.count', userID );
115
- if ( count > 50 ) return ctx.throw( 429 );
116
- let match = await broker.call( 'user.validatePassword', { userID, password });
117
- if ( match ) {
118
- return await next();
119
- } else {
120
- await brokers( 'core' ).call( 'check.increase', userID );
121
- return ctx.throw( 412, 'PASSWORD_WRONG' );
122
- }
123
- };
124
-
125
99
  helper.wmpTestGet = async ctx => {
126
100
  let { signature, timestamp, nonce, echostr } = ctx.query;
127
101
  let platform = await brokers( 'core' ).call( 'platform.findOne', { appID: ctx.params.appID });
@@ -200,6 +174,12 @@ helper.wmpTransform = async ( ctx, next ) => {
200
174
  } else if ( MsgType === 'event' && Event === 'annual_renew' ) {
201
175
  let { ExpiredTime } = ctx.request.body;
202
176
  ctx.request.body = { service: 'platform', event: 'ANNUAL_RENEW', expired: ExpiredTime * 1000 };
177
+ } else if ( MsgType === 'event' && Event === 'verify_expired' ) {
178
+ let { ExpiredTime } = ctx.request.body;
179
+ ctx.request.body = { service: 'platform', event: 'VERIFY_EXPIRED', expired: ExpiredTime * 1000 };
180
+ } else if ( MsgType === 'event' && Event === 'qualification_verify_success' ) {
181
+ let { ExpiredTime } = ctx.request.body;
182
+ ctx.request.body = { service: 'platform', event: 'VERIFY_SUCCESS', expired: ExpiredTime * 1000 };
203
183
  }
204
184
  let base = { ToUserName: FromUserName, FromUserName: ToUserName, CreateTime: parseInt( Date.now() / 1000 )};
205
185
  ctx.sendText = ({ content }) => ctx.body = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qingfu/core-env",
3
- "version": "0.1.37",
3
+ "version": "0.1.39",
4
4
  "readmeFilename": "README.md",
5
5
  "dependencies": {
6
6
  "@koa/cors": "4.0.0",