Files
litlyx/dashboard/server/api/admin/projects.ts
2024-08-06 15:32:46 +02:00

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;
});