Browse Source

HW 15 done

suslov-dmytro 1 year ago
parent
commit
7ec7365d73
2 changed files with 117 additions and 0 deletions
  1. 12 0
      15/index.html
  2. 105 0
      15/script.js

+ 12 - 0
15/index.html

@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>GraphQL</title>
+</head>
+<body>
+    <script src="script.js"></script>
+</body>
+</html>

+ 105 - 0
15/script.js

@@ -0,0 +1,105 @@
+// let gql = (url, query, variables={}) =>
+//     fetch(url, {
+//         method: 'POST',
+//         headers:{
+//             Accept: 'application/json',
+//             "Content-Type": 'application/json'
+//         },
+//         body: JSON.stringify({query, variables})
+//     }).then(res => res.json())
+
+// используя функцию gql, понаделать функций с параметрами для разных запросов: категории, категория по id с товарами, 
+// товар по id с картинками и описанием, логин, регистрация.
+
+// например:
+
+// const gqlLogin = (login, password) =>
+//    gql('http://shop-roles.node.ed.asmer.org.ua/graphql', `query login($login:String, $password: String){
+//      login(login:$loagin, password: $password)
+// }`, {login, password})
+
+let gql = (url, query, variables = {}) =>
+    fetch(url, {
+        method: 'POST',
+        headers: {
+            Accept: 'application/json',
+            "Content-Type": 'application/json'
+        },
+        body: JSON.stringify({ query, variables })
+    }).then(res => res.json())
+
+const url = 'http://shop-roles.node.ed.asmer.org.ua/graphql'
+
+// категории
+
+const gqlCategoriesList = () => {
+    return gql(url, `query cats{
+        CategoryFind(query: "[{}]"){
+            _id, name
+        }
+    }`, {})
+}
+
+// категория по id с товарами
+
+const productSearchById = (id) => {
+    let jsn = JSON.stringify({ _id: id })
+    return gql(
+        url,
+        `query searchById{
+            GoodFind(query: ${JSON.stringify(`[${jsn}]`)}){
+                name description images {
+                    _id
+                    createdAt
+                    text
+                    url
+                    originalFileName
+                }
+            }
+        }`
+    );
+};
+
+// товар по id с картинками и описанием
+
+const gqlCategories = () => {
+    return gql(url,
+        ` query categories{
+            CategoryFind(query:"[{}]"){
+                _id name goods {
+                    _id
+                    name
+                    price
+                    description
+                }
+            }
+        }`
+    );
+}
+
+// логин
+
+const gqlLogin = (login, password) => {
+    gql(url, `query login($login:String, $password: String){
+        login(login:$login, password: $password)
+       }`,
+    { login, password })
+}
+
+// регистрация
+
+const gqlRegister = (login, password) => {
+    return gql(url, `mutation register($login: String, $password: String){
+        UserUpsert(user: {login: $login, password: $password}){
+            _id, login, createdAt
+        }
+    }`, { login, password })
+}
+
+(async function call() {
+    console.log(await gqlCategoriesList());
+    console.log(await gqlRegister("Dmytro Suslov", "qwerty"));
+    console.log(await gqlLogin("Dmytro Suslov", "qwerty"));
+    console.log(await gqlCategories());
+    console.log(await productSearchById("62d5ca00b74e1f5f2ec1a156"));
+})();