mirror of
https://github.com/Litlyx/litlyx
synced 2025-12-11 08:18:37 +01:00
new selfhosted version
This commit is contained in:
83
dashboard/server/api/members/list.ts
Normal file
83
dashboard/server/api/members/list.ts
Normal file
@@ -0,0 +1,83 @@
|
||||
import { EventModel } from "@schema/metrics/EventSchema";
|
||||
import { Redis } from "~/server/services/CacheService";
|
||||
import { executeTimelineAggregation } from "~/server/services/TimelineService";
|
||||
import { TeamMemberModel, TeamMemberRole, TPermission } from "~/shared/schema/TeamMemberSchema";
|
||||
import { TUser, UserModel } from "~/shared/schema/UserSchema";
|
||||
|
||||
|
||||
export type MemberWithPermissions = {
|
||||
id: string | null,
|
||||
email: string,
|
||||
role: TeamMemberRole,
|
||||
pending: boolean,
|
||||
me: boolean,
|
||||
permission: TPermission
|
||||
}
|
||||
|
||||
|
||||
export default defineEventHandler(async event => {
|
||||
|
||||
const ctx = await getRequestContext(event, 'pid');
|
||||
const { project_id, user_id, user_email, project } = ctx;
|
||||
|
||||
const result: MemberWithPermissions[] = [];
|
||||
|
||||
const members = await TeamMemberModel.find({ project_id });
|
||||
|
||||
result.push({
|
||||
id: user_id,
|
||||
email: user_email,
|
||||
role: 'OWNER',
|
||||
me: user_id === project.owner.toString(),
|
||||
pending: false,
|
||||
permission: {
|
||||
webAnalytics: true,
|
||||
domains: ['*'],
|
||||
ai: true,
|
||||
events: true
|
||||
}
|
||||
})
|
||||
|
||||
for (const member of members) {
|
||||
|
||||
let userMember: TUser | null;
|
||||
|
||||
if (member.user_id) {
|
||||
userMember = await UserModel.findOne({ _id: member.user_id });
|
||||
} else {
|
||||
userMember = await UserModel.findOne({ email: member.email });
|
||||
}
|
||||
|
||||
const permission: TPermission = {
|
||||
webAnalytics: member.permission?.webAnalytics || false,
|
||||
events: member.permission?.events || false,
|
||||
ai: member.permission?.ai || false,
|
||||
domains: member.permission?.domains || []
|
||||
}
|
||||
|
||||
if (userMember) {
|
||||
result.push({
|
||||
id: member.id,
|
||||
email: userMember.email || member.email || 'NO_EMAIL',
|
||||
role: member.role,
|
||||
pending: member.pending,
|
||||
me: user_id === ((userMember as any).id.toString() || member.user_id || 'NO_ID'),
|
||||
permission
|
||||
})
|
||||
} else {
|
||||
result.push({
|
||||
id: member.id,
|
||||
email: member.email ?? 'error',
|
||||
role: member.role,
|
||||
pending: member.pending,
|
||||
me: false,
|
||||
permission: member.permission
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user