Groups
This commit is contained in:
parent
35b8d707d3
commit
17cb689753
@ -83,27 +83,71 @@ export async function GET() {
|
|||||||
const groupsWithCounts = await Promise.all(
|
const groupsWithCounts = await Promise.all(
|
||||||
groups.map(async (group: any) => {
|
groups.map(async (group: any) => {
|
||||||
try {
|
try {
|
||||||
const countResponse = await fetch(
|
// Récupérer tous les membres du groupe avec pagination pour gérer les grands groupes
|
||||||
`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/groups/${group.id}/members/count`,
|
// L'endpoint /members/count ne fonctionne pas correctement, on récupère donc la liste
|
||||||
{
|
let totalCount = 0;
|
||||||
headers: {
|
let first = 0;
|
||||||
Authorization: `Bearer ${token}`,
|
const max = 100; // Taille de page pour la pagination
|
||||||
},
|
let hasMore = true;
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
let count = 0;
|
while (hasMore) {
|
||||||
if (countResponse.ok) {
|
const membersResponse = await fetch(
|
||||||
count = await countResponse.json();
|
`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/groups/${group.id}/members?briefRepresentation=true&first=${first}&max=${max}`,
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${token}`,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (membersResponse.ok) {
|
||||||
|
const members = await membersResponse.json();
|
||||||
|
const membersArray = Array.isArray(members) ? members : [];
|
||||||
|
totalCount += membersArray.length;
|
||||||
|
|
||||||
|
// Si on a récupéré moins que max, on a tout récupéré
|
||||||
|
if (membersArray.length < max) {
|
||||||
|
hasMore = false;
|
||||||
|
} else {
|
||||||
|
first += max;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Si l'endpoint échoue, essayer l'endpoint count en fallback
|
||||||
|
try {
|
||||||
|
const countResponse = await fetch(
|
||||||
|
`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/groups/${group.id}/members/count`,
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${token}`,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (countResponse.ok) {
|
||||||
|
totalCount = await countResponse.json();
|
||||||
|
}
|
||||||
|
} catch (countError) {
|
||||||
|
logger.debug('Failed to get member count for group', {
|
||||||
|
groupId: group.id,
|
||||||
|
groupName: group.name
|
||||||
|
});
|
||||||
|
}
|
||||||
|
hasMore = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id: group.id,
|
id: group.id,
|
||||||
name: group.name,
|
name: group.name,
|
||||||
path: group.path,
|
path: group.path,
|
||||||
membersCount: count,
|
membersCount: totalCount,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
logger.error('Error getting group members count', {
|
||||||
|
groupId: group.id,
|
||||||
|
groupName: group.name,
|
||||||
|
error: error instanceof Error ? error.message : String(error)
|
||||||
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id: group.id,
|
id: group.id,
|
||||||
name: group.name,
|
name: group.name,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user