// getGql - фунция GraphQL запросов для всех запросов ниже! function getGql(endpoint) { let headers = { 'Content-Type': 'application/json;charset=utf-8', 'Accept': 'application/json', } if ('authToken' in localStorage) { headers.Authorization = 'Bearer ' + localStorage.authToken } return async function gql(query, variables = {}) { let result = await fetch(endpoint, { method: 'POST', headers, body: JSON.stringify({ query, variables }) }).then(res => res.json()) if (('errors' in result) && !('data' in result)) { throw new Error(JSON.stringify(result.errors)) } result = Object.values(result.data)[0] return result } } const gql = getGql('http://shop-roles.node.ed.asmer.org.ua/graphql') // скармливаем урл для запросов // ============================================================== // Запрос на список корневых категорий // запрос на самом сервере // query CategoryFind{ // CategoryFind(query: "[{\"parent\": null}]"){ // _id name // } // } let findCategory = `query baseCategory($searchVariablesCategory: String){ CategoryFind(query: $searchVariablesCategory){ _id name parent { _id name } } }` let variables = { searchVariablesCategory: JSON.stringify([{ parent: null }]) } // тест gql(findCategory, variables).then(console.log) // =============================================================== // Запрос для получения одной категории с товарами и картинками // запрос на самом сервере // query categoryFindOne($q: String,) { // CategoryFindOne(query: $q){ // _id name parent{ // _id name // } // goods{ // _id name description price // images{ // url // } // } // subCategories{ // _id name // } // } // } let findOneCategory = `query categoryFindOne($searchVariablesCategoryOne: String,) { CategoryFindOne(query: $searchVariablesCategoryOne){ _id name parent{ _id name } goods{ _id name description price images{ url } } subCategories{ _id name } } }` let variables = { searchVariablesCategoryOne: JSON.stringify([{ _id: "6262ca7dbf8b206433f5b3d1" }]) } // тест gql(findOneCategory, variables).then(console.log) // ====================================================== // Запрос на получение товара с описанием и картинками // запрос на сервере // query oneGoodWithImages($q2: String) { // GoodFindOne(query: $q2){ // _id name price description images { // url // } // } // } let findGoodWithImage = `query oneGoodWithImages($searchVariablesGoodOne: String) { GoodFindOne(query: $searchVariablesGoodOne){ _id name price description images { url } } } ` let variables = { searchVariablesGoodOne: JSON.stringify([{ _id: "62c9472cb74e1f5f2ec1a0d3" }]) } // тест gql(findGoodWithImage, variables).then(console.log) // =================================================================== // Запрос на регистрацию - работает, если не залогинен пользователь // запрос на сервере // mutation registration($loginReg: String, $passwordReg: String){ // UserUpsert(user: { // login: $loginReg, password: $passwordReg // }){ // _id createdAt // } // } let registration = ` mutation registration($loginReg:String,$passwordReg:String ){ UserUpsert(user:{ login:$loginReg, password:$passwordReg }){ _id createdAt } }` let variables = { loginReg: "abababa", passwordReg: "123123" } // тест gql(registration, variables).then(console.log) // ======================================================= // Запрос на логин // на сервере // query login($login: String, $password: String){ // login(login: $login, password: $password) // } let checkLogin = `query login($login: String, $password: String){ login(login: $login, password: $password) } ` let variables = { login: "abababa", password: "123123" } // тест gql(checkLogin, variables).then(console.log) // =============================================================================== // Запрос истории заказов - нужно учитывать, что работает только, если вместе с заголовком отправить JWT-token от пользователя // запрос на сервере // query order{ // OrderFind(query: "[{}]"){ // _id total orderGoods{ // good { // _id // name // price // } // } // } // } let orderFind = `query order ($order: String){ OrderFind(query: $order){ _id total orderGoods{ good { _id name price } } } } ` let variables = { order: JSON.stringify([{}]) } // тест gql(orderFind, variables).then(console.log) // ========================================================================== // Запрос оформления заказа - еще нужно добавить запрос на очистку корзины // запрос на сервере // mutation myOrder($createOrder: OrderInput){ // OrderUpsert(order: $createOrder) { // orderGoods{ // count good{ // _id // } // } // } // } let orderCreate = `mutation myOrder($createOrder: OrderInput){ OrderUpsert(order: $createOrder) { orderGoods{ count good{ _id } } } }` let variables = { createOrder: JSON.stringify({ orderGoods: { count: 2, good: { _id: "62c9472cb74e1f5f2ec1a0d2" } } }) } // тест gql(orderCreate, variables).then(console.log)