Skip to content

nouvelles routes d'API pour création d'usagers

Vincent Agnano requested to merge feature/api-users-create into master

Created by: adipasquale

grosse PR mais pas très compliquée, 70% de lignes de specs

Nouveaux endpoints

  1. users#create
  2. users#show
  3. user_profiles#create

Le besoin exprimé par l'aveyron était de pouvoir créer des usagers. J'ai donc commencé par la route 1. users#create

Il faut cependant gérer un cas particulier : si l'usager demandé existe déjà mais pas dans l'organisation demandée. La seule contrainte d'unicité existante est sur l'email donc ça revient à dire s'il existe un usager avec le même email.

Dans ce cas, j'ai fait en sorte que la route 1. users#create renvoie une erreur à peu près explicite, et l'ID de l'usager existant avec le même email. => ca implique le changement dans le modele User pour rajouter l'ID de l'autre usager en cas de conflit + le remaniement des erreurs renvoyées par l'API.

Pour couvrir ces cas là, j'ai donc ouvert une autre route 3. user_profiles#create qui permet de créer un lien entre un usager existante et une orga. En passant je supporte les champs notes et logement de ce profil.

Je me suis aussi dit que l'erreur d'unicité renvoyée par la route 1. users#create pouvait etre ambigue : on aura exactement la meme erreur si on demande à recréer un usager appartenant déjà à l'orga demandée, ou appartenant à une autre orga. Quand on reçoit l'erreur "email déjà utilisé" on ne sait donc pas si l'usager appartient déjà à l'orga ou pas. Pour le savoir, j'ai ouvert une autre route 2. users#show qui renvoie donc les détails sur un user, et les profils rattachés. J'ai fait bien attention de renvoyer uniquement les infos visibles par l'agent en appliquant les policies scopes dans les blueprints. Le but est d'éviter qu'un agent apprenne qu'un usager appartienne à une orga à laquelle l'agent n'a pas accès .

Documentation :

cf le draft pas encore publié : https://app.gitbook.com/@rdv-solidarites/s/rdv-solidarites/@drafts

tests sur la review app :

auth : http --json POST 'https://demo-rdv-solidarites-pr1196.osc-secnum-fr1.scalingo.io/api/v1/auth/sign_in' email='martine@demo.rdv-solidarites.fr' password='123456'

GET users : http GET https://demo-rdv-solidarites-pr1196.osc-secnum-fr1.scalingo.io/api/v1/users/1 access-token:XRT9EisSYjEcTxe9H97c8Q client:caC5GcAFXMtINEBcX5J4vQ uid:martine@demo.rdv-solidarites.fr

(en changeant le token et le client donc)

POST users : http POST https://demo-rdv-solidarites-pr1196.osc-secnum-fr1.scalingo.io/api/v1/users access-token:XRT9EisSYjEcTxe9H97c8Q client:caC5GcAFXMtINEBcX5J4vQ uid:martine@demo.rdv-solidarites.fr organisation_ids:='[1]' first_name=Jean last_name=Jacques email=jean@jacques.fr phone_number="06 60 60 60 60"

Merge request reports