From ef4d34d333a8fdfd6643b41c5dd71235d0a8db88 Mon Sep 17 00:00:00 2001 From: Bright Date: Thu, 30 May 2024 17:13:48 +0700 Subject: [PATCH] mapData --- src/controllers/UserController.ts | 21 ++++++++++++++++++++- src/keycloak/index.ts | 21 ++++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/controllers/UserController.ts b/src/controllers/UserController.ts index 44629fac..e1988227 100644 --- a/src/controllers/UserController.ts +++ b/src/controllers/UserController.ts @@ -28,6 +28,7 @@ import { removeUserGroup, removeUserRoles, getRoleMappings, + getUserCount } from "../keycloak"; // import * as io from "../lib/websocket"; // import elasticsearch from "../elasticsearch"; @@ -199,10 +200,28 @@ export class KeycloakController extends Controller { @Get("user") async getUserList(@Query() first = "", @Query() max = "" ,@Query() search = "") { + const total = await getUserCount(); const result = await getUserList(first, max, search); if (Array.isArray(result)) { - return result; + const mappedData = await Promise.all(result.map(async (x) => { + const roles = await getRoleMappings(x.id); + return { + id: x.id, + username: x.username, + firstname: x.firstName, + lastname: x.lastName, + email: x.email, + roles: roles + }; + })); + + const _mapData = { + data: mappedData, + total: total + }; + + return _mapData; } throw new Error("Failed. Cannot get user list."); } diff --git a/src/keycloak/index.ts b/src/keycloak/index.ts index 27317452..7047d295 100644 --- a/src/keycloak/index.ts +++ b/src/keycloak/index.ts @@ -141,7 +141,7 @@ export async function getUserList(first = "", max = "", search = "") { return Boolean(console.error("Keycloak Error Response: ", await res.json())); } - return ((await res.json()) as any[]).slice(0, 5000).map((v: Record) => ({ + return ((await res.json()) as any[]).map((v: Record) => ({ id: v.id, username: v.username, firstName: v.firstName, @@ -150,6 +150,25 @@ export async function getUserList(first = "", max = "", search = "") { })); } +export async function getUserCount() { + const res = await fetch( + `${KC_URL}/admin/realms/${KC_REALM}/users/count`, + { + headers: { + "authorization": `Bearer ${await getToken()}`, + "content-type": `application/json`, + }, + }, + ).catch((e) => console.log("Keycloak Error: ", e)); + + if (!res) return false; + if (!res.ok) { + return Boolean(console.error("Keycloak Error Response: ", await res.json())); + } + + return await res.json(); +} + /** * Update keycloak user by uuid *