nouvelles routes d'API pour création d'usagers
Created by: adipasquale
grosse PR mais pas très compliquée, 70% de lignes de specs
Nouveaux endpoints
users#create
users#show
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"