
// gqReq1()
function gqReq1() {

   //fetch(адрес, {method, headers: {}, body: JSON.stringify({query, variables})})
   //method: POST
   //content-type: application/json
   //body: json с query - строка и variables - объект с вложенными параметрами

   const gql = (url, query, variables) => fetch(url, {
      method: 'POST',   
      headers: {'Content-Type': 'application/json'}, 
      body: JSON.stringify({query, variables}),
   })
   // .then(response => response.json())
   // .then(result => console.log(result))
   ;

   (async function() {
   let response = await gql("http://shop-roles.asmer.fs.a-level.com.ua/graphql", `query cats($q:String) {
      CategoryFind(query:$q){
         name goods{
            name images{
            url
            }
         }
      }
   }`, {q: "[{}]"}); //должно приехать { data: {CategoryFind: [........]}}
   let result = await response.json();
   console.log(result)
   })()
}



gqReq2()
function gqReq2() {

   const getGQL = (url) =>
      (query, variables) => fetch(url, {
         //метод
         method: 'POST',
         headers: {
               //заголовок content-type
               "Content-Type": "application/json"
         },
         body: JSON.stringify({query, variables})
         //body с ключами query и variables
         
      }).then(res => res.json()).then(async (data) => {
         // console.log(data)         
         if ('errors' in data) { 
            throw new Error('ОШИБКА!!!!' + JSON.stringify(data.errors))
            // return Promise.reject(new Error('ОШИБКА')) // можно использовать в синхронной функции 
         } else {
            return data.data[Object.keys(data.data)[0]]
         }
         //расковырять data, если все ок - отдать data.login или data.CategoryFindOne, или шо там еще
         //если есть errors, то выбросить исключение и тем самым зареджектить промис
      });


   (async function() {
      const gql = getGQL('http://shop-roles.asmer.fs.a-level.com.ua/graphql')

      console.log((await gql(`query cats($q:String) {
         CategoryFind(query:$q){
            name goods{
               name images{
               url
               }
            }
         }
      }`, {q: "[{}]"})))

      console.log((await gql(`
      mutation reg($login: String, $password: String) {
         UserUpsert(user: {login: $login, password: $password, nick: $login}) {
         _id
         login
         }
      }           
   `, {login: 'tst', password: '123'})))

      console.log((await gql(`
         query NameForMe1($login:String, $password:String){
            login(login:$login, password:$password)
         }
      `, {login: 'tst', password: '123'})))

   })()
}

