Modifiche alla struttura della risposta API /admin/users/list/all.json?

Attualmente in esecuzione Discourse 3.5.0.beta5-dev (eff31e0d42).

Qualcuno sa se la risposta API dall’endpoint /admin/users/list/all.json è cambiata nell’ultima settimana circa? :thinking:

Nello specifico:

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

:thinking:

Penso che questo endpoint restituisse un oggetto JSON piatto che rappresentava direttamente un singolo utente quando interrogato con un indirizzo email esatto.

Tuttavia, la struttura della risposta attuale sembra ora racchiudere l’oggetto utente all’interno di un nuovo array users, il che ha interrotto alcune integrazioni SSO esistenti da parte nostra.

Ecco un esempio pseudo anonimizzato della risposta di ciò che penso sia cambiato “prima” e “dopo” come riferimento.

Vecchio:

{
  "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
}

Nuovo:

{
  "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
    }
  }
}

Qualcuno conosce un commit recente che potrebbe aver causato questa modifica? :thinking:

È effettivamente cambiato e il commit è questo

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 Mi Piace

La ricerca nei 73 commit che ho aggiornato ieri non ha trovato questa modifica non retrocompatibile DEV: replace selenium driver with playwright.

Grazie per il link @RGJ

1 Mi Piace

Il mio approccio:

  • carica /admin/users/list/all.json?email=email@example.com
  • controlla l’header x-discourse-route
  • cerca il file corrispondente (app/controllers/admin/users_controller.rb)
  • cerca il metodo corrispondente (index)
  • premi “Blame”
  • individua il commit

5 Mi Piace

Nooo… :scream:

Beh, questo è quello che ho imparato oggi!

Grazie @RGJ :clap:t2::star_struck:

2 Mi Piace

Sono riuscito a trovare quel commit in qualche modo, ma non sono riuscito (e ancora non ci riesco) a vedere dove ha modificato la struttura dei dati (ero al telefono, rendendo le cose un po’ più difficili).

1 Mi Piace

Suppongo che questa sia stata la modifica che ha interrotto l’API :confused:

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

È la riga root: :users che è stata aggiunta.

1 Mi Piace

Ci siamo ripresi dall’impatto di questa modifica.

Forse sto andando un po’ fuori tema, ma c’è un modo per monitorare questi tipi di aggiornamenti in modo da potermi avvisare quando una risposta API cambia da “X”, dopo essere stata “Y” per così tanti anni? :thinking:

Forse dei test unitari locali scriptati che potrei eseguire quotidianamente?

Anche se ora l’ho detto ad alta voce, non mi avviserebbe finché non avrei aggiornato il mio Discourse e questo non avesse interrotto le integrazioni.

Un ambiente di staging, immagino…

Potresti avere un ambiente di staging. Potresti anche creare un’azione di GitHub per il tuo codice che avvia discourse ed esegue un test sull’ultimo discourse ogni giorno.

2 Mi Piace

Ah-ha! Perfetto, funzionerebbe, grazie :grin:

1 Mi Piace

Penso che un plugin che chiami l’endpoint e lo renderizzi potrebbe essere un modo semplice per testare. E poi cambiare la GitHub action predefinita per essere eseguita quotidianamente invece che solo al push.

1 Mi Piace

Sembra che anche la documentazione necessiti di un aggiornamento \u003chttps://docs.discourse.org/#tag/Admin/operation/adminListUsers\u003e

In un mondo ideale, la documentazione verrebbe generata automaticamente dal codice sorgente e potremmo semplicemente consultare la cronologia dei commit per la documentazione, che conterrebbe solo le modifiche all’interfaccia.

4 Mi Piace

Anche questo mi ha tratto in inganno quando ho cercato di risolvere i problemi causati da questa modifica :confused:

anche questo ha interrotto un’integrazione che abbiamo - è qualcosa che dovremmo anticipare venga ripristinato?

1 Mi Piace

Ciao, sì mi dispiace, questo non avrebbe dovuto essere unito, è stato un mio errore.

Ma la buona notizia è che l’ho già annullato 8 ore fa: DEV: revert admin users list change (#32723) · discourse/discourse@7558e2c · GitHub

3 Mi Piace

Nooooooooo… (ripeti fino a svanire)

Questa è una notizia terribile :cry:

Dovremo cambiare di nuovo tutte le nostre integrazioni :exploding_head:

Mi dispiace per questo, purtroppo non avevo altra scelta che tornare indietro, sei stato coinvolto in un momento sfortunato.

2 Mi Piace

Una buona ragione per fare una pull request a @Richie perché così si spera ci sia un pulsante di revert semplice.

1 Mi Piace

Questo è il rischio che corriamo e il prezzo che paghiamo per vivere all’avanguardia :blush:

Mi stupisce ancora che Discourse sia open source, davvero. Chi sono io per lamentarmi :person_shrugging:

Grazie per aver risolto il problema @j.jaffeux :clap: :person_bowing:

4 Mi Piace