web-dev-qa-db-fra.com

Graphql - Comment effectuer la clause where

Je suis nouveau sur graphql et j'ai du mal avec une requête. Je souhaite renvoyer un utilisateur par son adresse e-mail

J'ai un type défini d'appel V1User et il a les champs suivants id, email, mot de passe, rôle

Que faut-il changer dans cette requête pour renvoyer un utilisateur sur la base d'un e-mail?

    query GetAllV1User {
  viewer {
     allV1Users{
      edges {
        node {
          id
          email
          role
          createdAt
          modifiedAt
        }
      }
    }
  }
}

J'ai essayé cette requête

    query getV1UserQuery($email: String!) {
  getV1User(email: $email) {
    id
    email
  }
}

Avec ces params

{"email": "[email protected]"}

Mais obtenez les erreurs suivantes

    {
  "errors": [
    {
      "message": "Unknown argument \"email\" on field \"getV1User\" of type \"Query\".",
      "locations": [
        {
          "line": 2,
          "column": 13
        }
      ],
      "name": "GraphQLError"
    },
    {
      "message": "Field \"getV1User\" argument \"id\" of type \"ID!\" is required but not provided.",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "name": "GraphQLError"
    }
  ]
}

Mon schéma est le suivant

Name        Type        Constraints 
id          ID          NonNull Unique  
modifiedAt  DateTime    NonNull 
createdAt   DateTime    NonNull 
role        String      NonNull 
password    String      NonNull 
email       String      NonNull Unique Indexed  

Merci

Salut

Cette requête a résolu mon problème

query getUserForEmailAddressAndPassword($where: V1UserWhereArgs) {
  viewer {
    allV1Users(where: $where) {
      edges {
        node {
          email
          id
          createdAt
          password
          modifiedAt
          role
        }        
      }
    }
  }
}

Avec ces variables de requête

{"where": {"email": {"eq" : "[email protected]"}, "password": {"eq":"te2st"}}}
12
Damien Gallagher

Je ne recommanderais pas d'utiliser la chaîne "où" dans votre clause de filtrage. N'essayez pas d'émuler SQL. Qu'essayez-vous de filtrer à l'aide de la clause where. S'il s'agit d'une adresse e-mail, la requête de votre schéma doit contenir l'utilisateur comme champ et l'e-mail comme paramètre de ce champ. Le premier exemple que vous avez envoyé est donc la bonne façon de le faire. Évitez également de déclarer des requêtes à l'aide de verbes tels que getUsers ou getUser. Le schéma doit simplement déclarer la requête en utilisant des noms

Query
{
   Users(email:String):[User!]
}

type User 
{
    id
    email
    createdAt
    otherStuff
}
2
Aaron Dsouza