Rechercher l'ID utilisateur à partir du nom d'utilisateur ou de l'adresse e-mail

J’ai l’archive de notre ancien flux d’actualités au format JSON, que je souhaite utiliser pour alimenter la catégorie Actualités de notre nouveau forum ; tous les messages du flux ont été publiés par des utilisateurs qui possèdent déjà des comptes sur le forum. La méthode la plus simple semble être de modifier l’importateur JSON générique afin qu’il recherche les utilisateurs existants (soit par nom d’utilisateur, soit par adresse e-mail) plutôt que de créer de nouveaux comptes.

Il semble que je puisse fournir une liste users vide dans mon JSON d’entrée pour éviter la création de nouveaux utilisateurs, puis modifier la ligne dans /srcipts/import_scripts/json_generic.rb qui définit l’identifiant de l’utilisateur pour chaque message :

user_id: user_id_from_imported_user_id(username_for(first_post["author"])) || -1

Je dois donc remplacer la valeur de cette paire clé-valeur par quelque chose qui récupère l’identifiant de l’utilisateur existant, au lieu de chercher l’identifiant d’un utilisateur créé précédemment par l’importateur.

Comment puis-je rechercher l’identifiant d’un utilisateur déjà existant, que ce soit à partir du nom d’utilisateur ou de l’adresse e-mail ?

Cela peut être fait via l’API.

Je sais qu’il est possible de rechercher des utilisateurs via l’API JSON, mais comme je le fais depuis Ruby, le langage sur lequel Discourse est lui-même construit, ne serait-il pas plus simple d’appeler directement la fonction dont j’ai besoin plutôt que de passer par un appel à l’API JSON ? Est-ce vraiment la méthode recommandée ? Je ne vois nulle part ailleurs l’utilisation de l’API JSON dans les importateurs que j’ai examinés.

Çela fait longtemps que je n’ai pas importé de données dans Discourse, donc je ne suis pas sûr, mais peut-être que quelqu’un d’autre le sait. Parfois, je dois rechercher des utilisateurs par e-mail et par ID en masse, alors j’utilise l’API.

Ce que je cherchais s’est avéré être ceci :

User.find_by_username(username)&.id