mirror of
https://github.com/Litlyx/litlyx
synced 2025-12-10 07:48:37 +01:00
admin panel
This commit is contained in:
97
dashboard/server/api/admin/users_projects.ts
Normal file
97
dashboard/server/api/admin/users_projects.ts
Normal file
@@ -0,0 +1,97 @@
|
||||
import { ProjectModel, TProject } from "@schema/project/ProjectSchema";
|
||||
import { TUser, UserModel } from "@schema/UserSchema";
|
||||
import { TProjectLimit } from "~/shared/schema/project/ProjectsLimits";
|
||||
|
||||
export type TAdminUserProjectInfo = TUser & {
|
||||
projects: (TProject & {
|
||||
limits: TProjectLimit[],
|
||||
visits: number,
|
||||
events: number,
|
||||
sessions: number
|
||||
})[],
|
||||
}
|
||||
|
||||
export default defineEventHandler(async event => {
|
||||
|
||||
const userData = getRequestUser(event);
|
||||
if (!userData?.logged) return;
|
||||
if (!userData.user.roles.includes('ADMIN')) return;
|
||||
|
||||
const { page, limit, sortQuery } = getQuery(event);
|
||||
|
||||
const pageNumber = parseInt(page as string);
|
||||
const limitNumber = parseInt(limit as string);
|
||||
|
||||
const users = await UserModel.aggregate([
|
||||
{
|
||||
$lookup: {
|
||||
from: "projects",
|
||||
localField: "_id",
|
||||
foreignField: "owner",
|
||||
pipeline: [
|
||||
{
|
||||
$lookup: {
|
||||
from: "project_limits",
|
||||
localField: "_id",
|
||||
foreignField: "project_id",
|
||||
as: "limits"
|
||||
}
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "visits",
|
||||
localField: "_id",
|
||||
foreignField: "project_id",
|
||||
pipeline: [
|
||||
{
|
||||
$count: "total_visits"
|
||||
}
|
||||
],
|
||||
as: "visit_data"
|
||||
}
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "events",
|
||||
localField: "_id",
|
||||
foreignField: "project_id",
|
||||
pipeline: [
|
||||
{
|
||||
$count: "total_events"
|
||||
}
|
||||
],
|
||||
as: "event_data"
|
||||
}
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "sessions",
|
||||
localField: "_id",
|
||||
foreignField: "project_id",
|
||||
pipeline: [
|
||||
{
|
||||
$count: "total_sessions"
|
||||
}
|
||||
],
|
||||
as: "session_data"
|
||||
}
|
||||
},
|
||||
{ $addFields: { visits: { $ifNull: [{ $arrayElemAt: ["$visit_data.total_visits", 0] }, 0] } } },
|
||||
{ $addFields: { events: { $ifNull: [{ $arrayElemAt: ["$event_data.total_events", 0] }, 0] } } },
|
||||
{ $addFields: { sessions: { $ifNull: [{ $arrayElemAt: ["$session_data.total_sessions", 0] }, 0] } }, },
|
||||
{ $unset: "visit_data" },
|
||||
{ $unset: "event_data" },
|
||||
{ $unset: "session_data" }
|
||||
|
||||
],
|
||||
as: "projects"
|
||||
},
|
||||
},
|
||||
{ $sort: JSON.parse(sortQuery as string) },
|
||||
{ $skip: pageNumber * limitNumber },
|
||||
{ $limit: limitNumber }
|
||||
]);
|
||||
|
||||
return users as TAdminUserProjectInfo[];
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user