Browse Source

gql interaction functions written for: registration, login, getCathegoryById, goodsList, ordersList, newOrder, getOrderById, getUserById

miskson 2 years ago
parent
commit
103d825df5
1 changed files with 107 additions and 58 deletions
  1. 107 58
      hw14-gql-requests/script.js

+ 107 - 58
hw14-gql-requests/script.js

@@ -4,20 +4,14 @@ function getGQL(url) {
             method: 'POST',
             headers: {
                 "Content-Type": "application/json",
+                ...(localStorage.authToken ? { "Authorization": "Bearer " + localStorage.authToken } : {})
             },
             body: JSON.stringify({ query, variables })
         }
 
-        // if(localStorage.authToken) {
-        //     options.headers.Authorization = `Bearer ${localStorage.authToken}`
-        // }
-
-        console.log(options.headers)
-
         try {
             let response = await fetch(url, options)
             let { data } = await response.json()
-            console.log('data reseved', data)
             return data[Object.keys(data)[0]]
         } catch (e) {
             throw new Error('an eror occured', e)
@@ -25,77 +19,132 @@ function getGQL(url) {
     }
 }
 
-let _id = "5dc94bd00e36db246e3049ee"
-
-async function catById(_id) {
-    let gql = await getGQL('http://shop-roles.asmer.fs.a-level.com.ua/graphql')
-    let data = await gql(`query catById($query:String){
-                    CategoryFindOne(query:$query){
-                        name goods{
-                        _id name
-                        }
-                    }
-                }`, { query: JSON.stringify([{ _id }]) })
-    return data
+async function getCathegoryById(_id) {
+    let gql = await getGQL(endpoint)
+    return await gql(`
+        query catById($query:String){
+            CategoryFindOne(query:$query){
+                name 
+                goods{
+                    _id name
+                }
+            }
+        }`, 
+        { query: JSON.stringify([{ _id }]) }
+    )
 }
 
 async function loginAndToken(log, pass) {
-    let gql = await getGQL('http://shop-roles.asmer.fs.a-level.com.ua/graphql')
-    let data =  await gql(`
+    let gql = await getGQL(endpoint)
+    return await gql(`
         query log($login:String, $password:String) {
             login(login: $login, password: $password)
-        }`, {login:  log, password: pass})
-    return data
+        }`, 
+        { login: log, password: pass }
+    )
 }
 
 async function registerUser(log, pass, nick = 'user') {
-    let gql = await getGQL('http://shop-roles.asmer.fs.a-level.com.ua/graphql')
-    let data = await gql(`
+    let gql = await getGQL(endpoint)
+    return await gql(`
         mutation register($login:String, $password:String, $nick:String) {
             UserUpsert(
-            user: { login: $login, password: $password, nick: $nick }){
+                user: { login: $login, password: $password, nick: $nick }
+            ){
                nick login _id 
             }
-        }`,{login: log, password: pass, nick: nick})
-    return data
+        }`, 
+        { login: log, password: pass, nick: nick }
+    )
 }
 
 async function goodsList() {
-    let gql = await getGQL('http://shop-roles.asmer.fs.a-level.com.ua/graphql')
-    let data = await gql(`
-    query goodFind{
-        GoodFind(query: "[{}]") {
-          _id name,
-        }
-      }
-    `)
-    return data
+    let gql = await getGQL(endpoint)
+    return await gql(`
+        query {
+            GoodFind(query: "[{}]") {
+                _id name categories{
+                _id name
+                }
+            }
+        }`
+    )
 }
 
-async function newOrder(count=3, id="5dc882c90e36db246e3049bc") {
-    let gql = await getGQL('http://shop-roles.asmer.fs.a-level.com.ua/graphql')
-    let data = await gql(`
-    mutation newOrder {
-        OrderUpsert(order:{
-          orderGoods:[
-            {count: ${count}, good:{_id: ${id}},
-          ]
-        }) {
-          _id
-          createdAt
-          total
+async function ordersList() {
+    let gql = await getGQL(endpoint)
+    return await gql(`
+        query {
+            OrderFind(query:"[{}]"){
+                _id total orderGoods{
+                    count good{
+                        _id name
+                    }
+                    owner{
+                        _id login nick  
+                    }
+                }
+            }
         }
-      }
     `)
-    return data
 }
 
+async function newOrder(quantity, _id) {
+    let gql = await getGQL(endpoint)
+    return await gql(`
+        mutation newOrder($count:Int!, $id:ID){
+            OrderUpsert(
+                order:{
+                  orderGoods: [ {count: $count, good:{_id: $id}} ]
+                }
+            ) { _id createdAt total }
+        }`, 
+        { count: quantity, id: _id }
+    )
+}
+
+async function getOrderById(_id) {
+    let gql = await getGQL(endpoint)
+    return await gql(`
+        query order ($query:String) {
+            OrderFindOne(query:$query) {
+                _id 
+                total 
+                orderGoods {
+                    count 
+                    good {
+                        name
+                    }
+                }
+            }
+        }`, 
+        { query: JSON.stringify([{ _id }]) }
+    )
+}
+
+async function getUserById(_id) {
+    let gql = await getGQL(endpoint)
+    return await gql(`
+        query findUserById($query:String){
+            UserFindOne(query:$query) {
+            _id nick login
+            }
+        }`, 
+        { query: JSON.stringify([{ _id }]) }
+    )
+}
+
+let endpoint = 'http://shop-roles.asmer.fs.a-level.com.ua/graphql';
+
 (async () => {
-    localStorage.authToken = await loginAndToken("OLDBOY228", "3321") 
-    //console.log('NOW LOCAL LOOKS LIKE DIS',localStorage)
-    //console.log('info token', localStorage.authToken)
-    console.log('id', await catById("5e203bb256d8f720513e6cbc"))
-    console.log('New user', await registerUser("OLDBOY333", "123", "asdasd"))
-    console.log('goods', await goodsList())
-    //console.log('new order', newOrder().then(res => console.log(res)))
+    localStorage.authToken = ''
+    //Тут вставить какой-то кучерявый ник что бы зарегало юзера else = null
+    console.log('New user', await registerUser("OLDBOY1338", "123", "asdasd"))
+    localStorage.authToken = await loginAndToken("OLDBOY228", "3321")
+    console.log('getCathegoryById', await getCathegoryById("5dc94bd00e36db246e3049ee")) //id для питсы
+    console.log('All goods', await goodsList()) //список всех товаров + категории 
+    console.log('All orders', await ordersList())
+    console.log('Make order', await newOrder(3, "5dc888d20e36db246e3049c5"))
+    console.log('Get order by id', await getOrderById("61aa7fb6c750c12ba6ba41fb"))
+    console.log('Get user by id', await getUserById("61aa9c7ac750c12ba6ba4238")) //айдишник OLDBOY1338
 })()