Add role type ; include admins in instance user list
This commit is contained in:
@@ -31,10 +31,11 @@ model User {
|
|||||||
}
|
}
|
||||||
|
|
||||||
model Role {
|
model Role {
|
||||||
User User @relation(fields: [userId], references: [id])
|
User User @relation(fields: [userId], references: [id])
|
||||||
userId String
|
userId String
|
||||||
Instance Instance @relation(fields: [instanceId], references: [id])
|
Instance Instance @relation(fields: [instanceId], references: [id])
|
||||||
instanceId String
|
instanceId String
|
||||||
|
type String
|
||||||
|
|
||||||
@@unique([userId, instanceId])
|
@@unique([userId, instanceId])
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,8 +12,12 @@ actions.get("user/:id", async (c) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
actions.get("instance/:id/users", async (c) => {
|
actions.get("user", async (c) => {
|
||||||
const instanceId = c.req.param("id");
|
const instanceId = c.req.query("instance_id");
|
||||||
|
if (!instanceId) {
|
||||||
|
return c.json({ error: "No instance id provided" }, 400);
|
||||||
|
}
|
||||||
|
|
||||||
const userData = await fetchAllUsers(instanceId);
|
const userData = await fetchAllUsers(instanceId);
|
||||||
if (userData) {
|
if (userData) {
|
||||||
return c.json(userData);
|
return c.json(userData);
|
||||||
|
|||||||
@@ -114,6 +114,47 @@ export async function getAllUsersFrom(instanceId: string): Promise<
|
|||||||
throw new Error("could not get all users in instance");
|
throw new Error("could not get all users in instance");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const admins = await prisma.user.findMany({
|
||||||
|
where: {
|
||||||
|
admin: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!admins) {
|
||||||
|
throw new Error("could not get all admins");
|
||||||
|
}
|
||||||
|
const adminData = await Promise.all(
|
||||||
|
admins.map(async (u) => {
|
||||||
|
const adminRoles = await prisma.role.findMany({
|
||||||
|
where: {
|
||||||
|
userId: u.id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!adminRoles) {
|
||||||
|
throw new Error("could not get admin roles for admin " + u.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
id: u.id,
|
||||||
|
userName: u.username,
|
||||||
|
nickName: u.nickname,
|
||||||
|
bio: u.bio,
|
||||||
|
picture: u.picture,
|
||||||
|
banner: u.banner,
|
||||||
|
admin: u.admin,
|
||||||
|
status: (
|
||||||
|
["online", "offline", "dnd", "idle", "invis"] as const
|
||||||
|
).includes(u.status as any)
|
||||||
|
? (u.status as "online" | "offline" | "dnd" | "idle" | "invis")
|
||||||
|
: "offline",
|
||||||
|
role: adminRoles.map(r => ({
|
||||||
|
userId: r.userId,
|
||||||
|
instanceId: r.instanceId,
|
||||||
|
})),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
const userData = await Promise.all(
|
const userData = await Promise.all(
|
||||||
users.map(async (u) => {
|
users.map(async (u) => {
|
||||||
const userRoles = await prisma.role.findMany({
|
const userRoles = await prisma.role.findMany({
|
||||||
@@ -143,7 +184,7 @@ export async function getAllUsersFrom(instanceId: string): Promise<
|
|||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
return userData;
|
return userData.concat(adminData);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
Reference in New Issue
Block a user