Add role type ; include admins in instance user list

This commit is contained in:
Kevin Puig
2025-09-27 12:26:24 -04:00
parent b22734831e
commit c39ab15694
3 changed files with 53 additions and 7 deletions

View File

@@ -31,10 +31,11 @@ model User {
}
model Role {
User User @relation(fields: [userId], references: [id])
userId String
Instance Instance @relation(fields: [instanceId], references: [id])
instanceId String
User User @relation(fields: [userId], references: [id])
userId String
Instance Instance @relation(fields: [instanceId], references: [id])
instanceId String
type String
@@unique([userId, instanceId])
}

View File

@@ -12,8 +12,12 @@ actions.get("user/:id", async (c) => {
}
});
actions.get("instance/:id/users", async (c) => {
const instanceId = c.req.param("id");
actions.get("user", async (c) => {
const instanceId = c.req.query("instance_id");
if (!instanceId) {
return c.json({ error: "No instance id provided" }, 400);
}
const userData = await fetchAllUsers(instanceId);
if (userData) {
return c.json(userData);

View File

@@ -114,6 +114,47 @@ export async function getAllUsersFrom(instanceId: string): Promise<
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(
users.map(async (u) => {
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) {
console.log(err);
return null;