mirror of
https://github.com/linux-odyssey/linux-odyssey.git
synced 2026-11-07 19:10:12 +08:00
convert analytics to TS
This commit is contained in:
1 parent
9509bbc355
commit
ece0ec7c41
25 files changed
+11595
-661
No files matched your search
@@ -0,0 +1,50 @@
|
||||
import { Session, User } from '@linux-odyssey/models'
|
||||
import Pagination from './pagination.ts'
|
||||
|
||||
function loginMethods(user: any) {
|
||||
const methods = []
|
||||
if (user.hashedPassword) methods.push('password')
|
||||
if (user.socialLogins) methods.push(...Object.keys(user.socialLogins))
|
||||
return methods
|
||||
}
|
||||
|
||||
export function userCount() {
|
||||
return User.countDocuments({})
|
||||
}
|
||||
|
||||
export async function userList(pagination: Pagination) {
|
||||
const users = await Session.aggregate([
|
||||
pagination.match('user'),
|
||||
{
|
||||
$group: {
|
||||
_id: '$user',
|
||||
count: { $sum: 1 },
|
||||
lastActivityAt: { $max: '$lastActivityAt' },
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: 'users',
|
||||
localField: '_id',
|
||||
foreignField: '_id',
|
||||
as: 'userData',
|
||||
},
|
||||
},
|
||||
{ $unwind: '$userData' },
|
||||
pagination.sort('userData._id'),
|
||||
pagination.limit(),
|
||||
])
|
||||
|
||||
return users.map(({ userData, count, lastActivityAt }) => {
|
||||
const { _id, username, email, createdAt } = userData
|
||||
return {
|
||||
_id,
|
||||
username,
|
||||
email,
|
||||
createdAt: createdAt?.toLocaleString(),
|
||||
method: loginMethods(userData),
|
||||
sessionCount: count,
|
||||
lastActivityAt: lastActivityAt?.toLocaleString(),
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user