Changements dans la structure de la réponse API /admin/users/list/all.json ?

Exécution actuelle de Discourse 3.5.0.beta5-dev (eff31e0d42).

Quelqu’un saurait-il si la réponse de l’API du point de terminaison /admin/users/list/all.json a changé au cours de la dernière semaine environ ? :thinking:

Spécifiquement :

GET /admin/users/list/all.json?email=email@example.com

:thinking:

Je pense que ce point de terminaison renvoyait auparavant un objet JSON plat représentant directement un seul utilisateur lorsqu’il était interrogé avec une adresse e-mail exacte.

Cependant, la structure de réponse actuelle semble maintenant encapsuler l’objet utilisateur dans un nouveau tableau users, ce qui a cassé quelques intégrations SSO existantes de notre côté.

Voici un exemple pseudo anonymisé de la réponse de ce qui, je pense, a changé “avant” et “après” à titre de référence.

Ancien :

{
  "id": 1,
  "username": "sampleuser",
  "name": "",
  "avatar_template": "/user_avatar/example.com/sampleuser/{size}/avatar.png",
  "active": true,
  "admin": false,
  "moderator": false,
  "last_seen_at": "2025-05-11T08:27:28.578Z",
  "created_at": "2020-01-01T12:00:00.000Z",
  "suspended": false,
  "trust_level": 1
}

Nouveau :

{
  "users": [
    {
      "id": 1,
      "username": "sampleuser",
      "name": "",
      "avatar_template": "/user_avatar/example.com/sampleuser/{size}/avatar.png",
      "email": "someone@example.com",
      "active": true,
      "admin": false,
      "moderator": false,
      "last_seen_at": "2025-05-11T09:34:35.900Z",
      "created_at": "2020-01-01T12:00:00.000Z",
      "suspended": false,
      "trust_level": 1
    }
  ],
  "meta": {
    "message_bus_last_ids": {
      "bulk_delete": 0
    }
  }
}

Quelqu’un connaîtrait-il un commit récent qui pourrait avoir causé ce changement ? :thinking:

Il a effectivement changé et le commit est celui-ci

diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb
index 92d906f161..70406efce5 100644
--- a/app/controllers/admin/users_controller.rb
+++ b/app/controllers/admin/users_controller.rb
@@ -32,7 +32,16 @@ class Admin::UsersController < Admin::StaffController
   def index
     users = ::AdminUserIndexQuery.new(params).find_users

-    opts = { include_can_be_deleted: true, include_silence_reason: true }
+    opts = {
+      include_can_be_deleted: true,
+      include_silence_reason: true,
+      root: :users,
+      meta: {
+        message_bus_last_ids: {
+          bulk_delete: MessageBus.last_id("/bulk-user-delete"),
+        },
+      },
+    }
     if params[:show_emails] == "true"
       StaffActionLogger.new(current_user).log_show_emails(users, context: request.path)
       opts[:emails_desired] = true

5 « J'aime »

Aucune recherche parmi les 73 modifications que j’ai mises à jour hier n’a permis de trouver ce changement majeur DEV: remplacer le pilote selenium par playwright.

Merci pour le lien @RGJ

1 « J'aime »

Mon approche :

  • charger /admin/users/list/all.json?email=email@example.com
  • vérifier l’en-tête x-discourse-route
  • rechercher le fichier correspondant (app/controllers/admin/users_controller.rb)
  • rechercher la méthode correspondante (index)
  • appuyer sur « Blame »
  • repérer le commit

5 « J'aime »

Non mais sans blague… :scream:

Eh bien, voilà ce que j’ai appris aujourd’hui !

Merci @RGJ :clap:t2::star_struck:

2 « J'aime »

J’ai réussi à trouver ce commit d’une manière ou d’une autre, mais je n’ai pas pu voir (et je ne vois toujours pas) où il a modifié la structure des données (j’étais sur mon téléphone, ce qui rendait les choses un peu plus difficiles).

1 « J'aime »

Je suppose que c’était le changement radical dans la réponse de l’API :confused:

Dans /app/assets/javascripts/admin/addon/controllers/admin-users-list-show.js

C’est la ligne root: :users qui a été ajoutée.

1 « J'aime »

Nous nous sommes maintenant remis de l’impact de ce changement.

Peut-être que je sors un peu du sujet, mais y a-t-il un moyen de suivre ce type de mises à jour afin de me notifier lorsqu’une réponse d’API change de « X », après avoir été « Y » pendant tant d’années ? :thinking:

Une sorte de tests unitaires locaux scriptés que je pourrais exécuter quotidiennement peut-être ?

Bien que maintenant que je l’ai dit à voix haute, cela ne me notifierait qu’après avoir mis à jour mon Discourse et que cela aurait cassé les intégrations.

Un environnement de staging, je suppose…

Vous pourriez avoir un environnement de staging. Vous pourriez également créer une action GitHub pour votre code qui démarre Discourse et exécute un test sur le dernier Discourse chaque jour.

2 « J'aime »

Ah-ha ! Parfait, ça marcherait, merci :grin:

1 « J'aime »

Je pense qu’un plugin qui appellerait le point de terminaison et le rendrait pourrait être un moyen facile de tester. Et ensuite, changer l’action GitHub par défaut pour qu’elle s’exécute quotidiennement au lieu de seulement lors d’un push.

1 « J'aime »

Il semble que la documentation ait également besoin d’une mise à jour \u003chttps://docs.discourse.org/#tag/Admin/operation/adminListUsers\u003e

Dans un monde idéal, la documentation serait générée automatiquement à partir du code source et nous pourrions simplement consulter l’historique des commits pour la documentation, qui ne contiendrait que les modifications de l’interface.

4 « J'aime »

C’est ce qui m’a aussi piégé lorsque j’ai essayé de résoudre les problèmes causés par ce changement :confused:

cela a également cassé une intégration que nous avons - est-ce quelque chose que nous devrions anticiper comme étant annulé ?

1 « J'aime »

Salut, oui désolé, cela n’aurait pas dû être fusionné, c’était mon erreur.

Mais la bonne nouvelle, c’est que je l’ai déjà annulé il y a 8 heures : DEV: revert admin users list change (#32723) · discourse/discourse@7558e2c · GitHub

3 « J'aime »

Nonnnnnnnnn… (répéter jusqu’à la fin)

C’est une terrible nouvelle :cry:

Nous allons devoir changer toutes nos intégrations encore une fois :exploding_head:

Désolé pour cela, malheureusement je n’avais pas d’autre choix que de revenir en arrière, tu as été pris à un moment malheureux.

2 « J'aime »

Une bonne raison de faire une pull request à @Richie, car ainsi il y a espérons-le, un bouton de revert simple.

1 « J'aime »

C’est le risque que nous prenons et le prix que nous payons pour vivre à la pointe :blush:

Cela me sidère toujours que Discourse soit open source, vraiment. Qui suis-je pour me plaindre :person_shrugging:

Merci d’avoir résolu le problème @j.jaffeux :clap: :person_bowing:

4 « J'aime »