Files
BRETT/server/api/admin/users.get.ts
T
2026-10-03 20:07:49 +02:00

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) ?? [] }))
})