mirror of
https://github.com/Litlyx/litlyx
synced 2025-12-10 07:48:37 +01:00
68 lines
1.7 KiB
TypeScript
68 lines
1.7 KiB
TypeScript
import { ProjectModel } from "@schema/ProjectSchema";
|
|
|
|
export type AdminProjectsList = {
|
|
premium: boolean,
|
|
created_at: Date,
|
|
project_name: string,
|
|
premium_type: number,
|
|
_id: string,
|
|
user: {
|
|
name: string,
|
|
email: string,
|
|
given_name: string,
|
|
picture: string,
|
|
created_at: Date
|
|
},
|
|
total_visits: number,
|
|
total_events: number,
|
|
total_sessions: number
|
|
}
|
|
|
|
export default defineEventHandler(async event => {
|
|
|
|
const userData = getRequestUser(event);
|
|
if (!userData?.logged) return;
|
|
if (!userData.user.roles.includes('ADMIN')) return;
|
|
|
|
const data: AdminProjectsList[] = await ProjectModel.aggregate([
|
|
{
|
|
$lookup: {
|
|
from: "users",
|
|
localField: "owner",
|
|
foreignField: "_id",
|
|
as: "user"
|
|
}
|
|
},
|
|
{
|
|
$lookup: {
|
|
from: "project_counts",
|
|
localField: "_id",
|
|
foreignField: "project_id",
|
|
as: "counts"
|
|
}
|
|
},
|
|
{
|
|
$project: {
|
|
project_name: "$name",
|
|
premium: 1,
|
|
premium_type: 1,
|
|
created_at: 1,
|
|
user: {
|
|
$first: "$user"
|
|
},
|
|
total_visits: {
|
|
$arrayElemAt: ["$counts.visits", 0]
|
|
},
|
|
total_events: {
|
|
$arrayElemAt: ["$counts.events", 0]
|
|
},
|
|
total_sessions: {
|
|
$arrayElemAt: ["$counts.sessions", 0]
|
|
}
|
|
}
|
|
}
|
|
]);
|
|
|
|
return data;
|
|
|
|
}); |