我有一个名为user_feedbacks的表,
对于类型,我们有4个默认值 -1建议,2请求,3损坏报告,4事件
对于状态,我们有3个默认值 -0开,1进行中,2关
我想在每种状态的每种类型下显示记录数,如[Required Output]所示,
{
"status": "success",
"code": 200,
"data": {
"1"(Type): {
"0" (status): 20, (total)
"1": 19,
"2": 28
},
"2": {
"0": 20,
"1": 19,
"2": 28
},
"3": {
"0": 20,
"1": 19,
"2": 28
},
"4": {
"0": 20,
"1": 19,
"2": 28
}
}
}
下面是我的代码,
在feedback.js中
static async getFeedbackStats(opts) {
assert.object(opts, 'opts')
assert.func(opts.mysql_db, 'opts.mysql_db')
const { mysql_db } = opts
const result = mysql_db.select('type', 'status', mysql_db.raw('count(status)'))
.from('user_feedbacks')
.groupBy('status', 'type')
return result
}
在handler.js中
const assert = require('assert-plus')
const Utils = require('../common/repos/feedbacks')
const Auth = require('../common/auth')
const Logger = require('../common/debug_logger')
async function handler(event, ctx, opts) {
Logger.info('Feedback stats handler has been invoked: %j', event)
const auth = await Auth.authenticate(event)
if (!auth.success){
return { status : 'failed', code : 401}
}
assert('params' in auth, 'auth.params')
assert('auth_ctx' in auth, 'auth.auth_ctx')
assert('user_id' in auth.auth_ctx, 'auth.auth_ctx.user_id')
Logger.info('Feedback stats handler Auth.Params: %j', auth.params)
const result = await Utils.getFeedbackStats(opts)
return { status: 'success', code: 200, data: result }
}
module.exports = { handler }
上面的代码返回下面的输出[Output i return],
{
"status":"success",
"code":200,
"data":[
{
"type":1,
"status":0,
"count(status)":2
},
{
"type":2,
"status":0,
"count(status)":1
},
{
"type":1,
"status":1,
"count(status)":1
},
{
"type":1,
"status":2,
"count(status)":1
}
]
}
任何人都可以帮助我获得上面提到的输出结果吗?
因此,在处理程序中,您需要更改:
const result = await Utils.getFeedbackStats(opts);
return { status: 'success', code: 200, data: result }
至
const result = await Utils.getFeedbackStats(opts);
const processedResult = processResult(result);
return { status: 'success', code: 200, data: processedResult }
现在processedResult
获取数据并返回数据。这是一个非常简单的算法,仅对数据进行混洗。比异步/等待要容易得多。
const processResult = ( { status, code, data } ) => {
// This might be shorter to program
const objResult = {
"1": { "0": 0, "1": 0, "2": 0 },
"2": { "0": 0, "1": 0, "2": 0 },
"3": { "0": 0, "1": 0, "2": 0 },
"4": { "0": 0, "1": 0, "2": 0 },
};
// augment default return
return {
status,
code,
data: data.reduce((acc, { type, status, count }) => {
return {...acc, [type]: {...acc[type], [status]: count } };
}, objResult)
};
};
// test
const example = {
"status":"success",
"code":200,
"data":[
{
"type":1,
"status":0,
"count":2
},
{
"type":2,
"status":0,
"count":1
},
{
"type":1,
"status":1,
"count":1
},
{
"type":1,
"status":2,
"count":1
}
]
};
console.log(processResult(example));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句