123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- function getGql (endpoint){
- let headers = {
- 'Content-Type': 'application/json;charset=utf-8',
- 'Accept': 'application/json'
- }
-
- return async function gql(query, variables={}) {
- if ("authToken" in localStorage) {
- headers.Authorization = "Bearer " + localStorage.authToken
- }
- 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
- }
- }
-
- /*Запрос на список корневых категорий
- Используем CategoryFind, однако в параметре query используем поиск по полю parent, которое должно быть равно null. (у корневых категорий нет родителя)*/
- const gql = getGql('http://shop-roles.node.ed.asmer.org.ua/graphql')
-
- const gqlRootCats = () =>
- gql(`query baseCategory($searchNullparent: String){
- CategoryFind(query: $searchNullparent){
- _id name parent {
- _id
- name
- }
- }
- }`, {
- searchNullparent: JSON.stringify([{parent: null}])
- })
- //gqlRootCats().then(console.log)
- /*Запрос для получения одной категории с товарами и картинками
- Используем CategoryFindOne, передав _id. Попросите GraphQL прислать вам товары из этой категории, а так же подкатегории. Параметр: _id*/
- const gqlCategoryGoodsAndSubCategoryGoods = (_id) =>
- gql(`query CategoryGoodsAndSubCategoryGoods($qCategoryId: String) {
- CategoryFindOne(query: $qCategoryId){
- _id
- name
- parent{
- _id
- name
- }
- subCategories{
- _id
- name
- goods{
- _id
- name
- }
- }
- goods{
- _id name price
- images {
- url
- }
- }
- }
- }`, {
- qCategoryId: JSON.stringify([{ _id }])
- })
- //gqlCategoryGoodsAndSubCategoryGoods("62c94b10b74e1f5f2ec1a0dd").then(console.log)
- /*Запрос на получение товара с описанием и картинками
- Аналогично предыдущему запросу, но используем GoodFindOne, так же по _id. Параметр: _id*/
- const gqlOneGoodWithDescriptionAndImages = (_id) =>
- gql(`query oneGoodWithDescriptionAndImages($GoodId: String){
- GoodFindOne(query: $GoodId){
- _id
- description
- name
- price
- images{
- url
- }
- }
- }`, {
- GoodId: JSON.stringify( [{ _id }] )
- })
- //gqlOneGoodWithDescriptionAndImages("62c94990b74e1f5f2ec1a0db").then(console.log)
- /*Запрос на регистрацию
- Используется мутация UserUpsert без указания _id пользователя. С указанием _id будет работать редактирование (обновление профиля). Параметры - логин и пароль*/
- const gqlUserAdd = (login, password) =>
- gql(`mutation registration($login:String, $password: String){
- UserUpsert(user: {login:$login, password: $password}){
- _id login createdAt
- }
- }`, {
- login,
- password
- }
- )
- //gqlUserAdd("vasya321986320915sf5654755ssddgfg", "пороль").then(console.log)
- /*Запрос на логин
- query login. В ответ приходит токен. Пригодится для залогинивания через authReducer. Параметры: логин и пароль.*/
- const gqllogin = (login, password) =>
- gql(`query login($login:String, $password:String){
- login(login:$login, password:$password)
- }`, {
- login,
- password
- }
- )
- // gqllogin("vasya321986320915sf5654755ssddgfg", "пороль").then(x => {console.log(x)
- // localStorage.authToken = x})
- /*Запрос истории заказов
- OrderFind. По умолчанию возвращает все ваши заказы (но не чужие). Если вы аноним - то и заказов у вас нет;*/
- const gqlOrderFind = () =>
- gql(`query {
- OrderFind(query: "[{}]") {
- _id
- createdAt
- total
- }
- }`,
- )
- //gqlOrderFind().then(console.log)
- /*Запрос оформления заказа
- Мутация OrderUpsert с массивом orderGoods, в которых есть объект good с единственным полем - _id, а также count. Используя этот запросы мы будем передавать информацию из cartReducer на сервер для оформления заказа. Параметр: массив orderGoods с элементами вида {good: {_id}, count}. Параметров нет, так как thunk может прочитать состояние редьюсера корзины используя передаваемый в него getState. После успешного оформления заказа на бэке задиспатчить экшон очистки корзины;*/
- //version2
- const OrderUpsert2 = (arrGoods) =>
- gql(`mutation ($arrGoods: [OrderGoodInput]){
- OrderUpsert(order: {orderGoods: $arrGoods}) {
- _id, total, orderGoods {
- good {
- name
- }
- }
- }
- }`, {
- arrGoods
- }
- )
|