mirror of
https://github.com/Litlyx/litlyx
synced 2025-12-09 23:48:36 +01:00
84 lines
2.1 KiB
TypeScript
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;
|
|
|
|
}); |