Files
litlyx/dashboard/server/api/admin/projects.ts
2024-11-06 17:25:48 +01:00

84 lines
2.1 KiB
TypeScript

import { UserModel } from "@schema/UserSchema";
export type AdminProjectsList = {
_id: string,
name: string,
given_name: string,
created_at: string,
email: string,
projects: {
_id: string,
owner: string,
name: string,
premium: boolean,
premium_type: number,
customer_id: string,
subscription_id: string,
premium_expire_at: string,
created_at: string,
__v: number,
counts: { _id: string, project_id: string, events: number, visits: number, sessions: number, updated_at?: string }
}[],
}
export default defineEventHandler(async event => {
const userData = getRequestUser(event);
if (!userData?.logged) return;
if (!userData.user.roles.includes('ADMIN')) return;
const data: AdminProjectsList[] = await UserModel.aggregate([
{
$lookup: {
from: "projects",
localField: "_id",
foreignField: "owner",
as: "projects"
}
},
{
$unwind: {
path: "$projects",
preserveNullAndEmptyArrays: true
}
},
{
$lookup: {
from: "project_counts",
localField: "projects._id",
foreignField: "project_id",
as: "projects.counts"
}
},
{
$addFields: {
"projects.counts": {
$arrayElemAt: ["$projects.counts", 0]
}
}
},
{
$group: {
_id: "$_id",
name: {
$first: "$name"
},
given_name: {
$first: "$given_name"
},
created_at: {
$first: "$created_at"
},
email: {
$first: "$email"
},
projects: {
$push: "$projects"
}
}
}
]);
return data;
});