feat: add usercount, session count and complete rate

This commit is contained in:
wancat committed 2023-10-14 16:03:44 +08:00
1 parent add6bfd100
commit cc95bb195b
7 files changed
+131 -5

No files matched your search

@@ -0,0 +1,15 @@
import { userCount } from '../models/users.js'
import { sessionCount, sessionCompleted } from '../models/quests.js'
// eslint-disable-next-line import/prefer-default-export
export async function homeController(req, res) {
const payload = {
title: 'Linux Odyssey Admin',
userCount: await userCount(),
sessionCount: await sessionCount(),
sessionCompleted: await sessionCompleted(),
}
payload.completedRate =
Math.round((payload.sessionCompleted / payload.sessionCount) * 10000) / 100
res.render('home', payload)
}
+2 -3
View File
@@ -2,6 +2,7 @@ import connectDB from '@linux-odyssey/models'
import express from 'express'
import { engine } from 'express-handlebars'
import config from './config.js'
import { homeController } from './controllers/index.js'
async function main() {
await connectDB(config.db)
@@ -12,9 +13,7 @@ async function main() {
app.set('view engine', 'handlebars')
app.set('views', './views')
app.get('/', (req, res) => {
res.render('home', { title: 'Linux Odyssey Admin' })
})
app.get('/', homeController)
app.listen(3001, () => {
console.log('Server started on http://localhost:3001')
+24
View File
@@ -0,0 +1,24 @@
import { Session } from '@linux-odyssey/models'
export function sessionCount() {
return Session.find().count()
}
export function sessionCompleted() {
return Session.find({ status: 'finished' }).count()
}
export function averageTimeUsage() {
return Session.aggregate([
{
$group: {
_id: '$quest',
average: {
$avg: {
$subtract: ['$finishedAt', '$createdAt'],
},
},
},
},
])
}
+6
View File
@@ -0,0 +1,6 @@
import { User } from '@linux-odyssey/models'
// eslint-disable-next-line import/prefer-default-export
export function userCount() {
return User.find().count()
}