forked from BRETT/BRETT
27 lines
881 B
TypeScript
27 lines
881 B
TypeScript
import { asc, eq } from 'drizzle-orm'
|
|
import { roles, userRoles, users } from '../../db/schema'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
await requirePermission(event, 'admin.access')
|
|
const db = useDb()
|
|
|
|
const allUsers = await db
|
|
.select({ id: users.id, name: users.name, email: users.email, createdAt: users.createdAt })
|
|
.from(users)
|
|
.orderBy(asc(users.name))
|
|
|
|
const roleRows = await db
|
|
.select({ userId: userRoles.userId, roleId: roles.id, name: roles.name })
|
|
.from(userRoles)
|
|
.innerJoin(roles, eq(userRoles.roleId, roles.id))
|
|
|
|
const byUser = new Map<number, { id: number, name: string }[]>()
|
|
for (const row of roleRows) {
|
|
const list = byUser.get(row.userId) ?? []
|
|
list.push({ id: row.roleId, name: row.name })
|
|
byUser.set(row.userId, list)
|
|
}
|
|
|
|
return allUsers.map(u => ({ ...u, roles: byUser.get(u.id) ?? [] }))
|
|
})
|