graphQL.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // ДЗ: допилить:
  2. const getGQL = url =>
  3. (query, variables) => fetch(url, {
  4. //метод
  5. method: 'POST',
  6. headers: {
  7. //заголовок content-type
  8. "Content-Type": "application/json"
  9. },
  10. body: JSON.stringify({ query, variables })
  11. //body с ключами query и variables
  12. }).then(res => res.json()).then(data => {
  13. //расковырять data, если все ок - отдать data.login или data.
  14. // CategoryFindOne, или шо там еще
  15. //если есть errors и нет data, то выбросить исключение и тем самым зареджектить промис
  16. return data
  17. });
  18. const gql = getGQL('http://shop-roles.asmer.fs.a-level.com.ua/graphql');
  19. // console.log((await gql(`
  20. // query NameForMe1($login:String, $password:String){
  21. // login(login:$login, password:$password)
  22. // }
  23. // `, { login: 'tst', password: '123' })).data.login)
  24. // написать тестовых запросов:
  25. // логин, регистрация, категории все, категория по id, товар по id
  26. // Регистрация
  27. async function gqlRegistration(login, password) {
  28. try {
  29. let result = await gql(`mutation register ($login:String, $password:String)
  30. {UserUpsert(user:{login:$login, password:$password, nick:$login}) {_id}}`,
  31. { "login": login, "password": password });
  32. return (result.errors?result.errors[0].message:result.data.UserUpsert._id);
  33. }
  34. catch (e) { e}
  35. };
  36. // Авторизация
  37. async function gqlLogin(login, password) {
  38. try {
  39. let result = await gql(`query log ($login:String, $password:String)
  40. { login(login:$login, password:$password)}`,
  41. { "login": login, "password": password });
  42. return (result.data.login?result.data.login:'Пользователь не найден')
  43. }
  44. catch(e) {e}
  45. };
  46. // Все категории
  47. async function gqlCats() {
  48. try {
  49. let result = await gql(`
  50. query cats($q:String){
  51. CategoryFind(query:$q){_id name parent {
  52. _id
  53. createdAt
  54. name
  55. }}
  56. }`, {"q": "[{}]"});
  57. return (!result.errors?result.data:result.errors[0].message)
  58. }
  59. catch(e) {e}
  60. };
  61. //Категория по id
  62. async function gqlCatById(catId) {
  63. try {
  64. const catIdQ = `[{"_id":"${catId}"}]`;
  65. let result = await gql(`query catById($catId:String){
  66. CategoryFindOne(query:$catId)
  67. {_id name parent{name} subCategories{name}
  68. }}`,
  69. { "catId": catIdQ });
  70. return (!result.errors?result.data:result.errors[0].message)
  71. }
  72. catch(e) {e}
  73. };
  74. //Товар по id
  75. async function gqlGoodById(goodId) {
  76. try {
  77. const goodIdQ = `[{"_id":"${goodId}"}]`;
  78. let result = await gql(`query goodById($goodId:String){
  79. GoodFindOne(query:$goodId)
  80. {_id name price owner{nick}
  81. }}`,
  82. { "goodId": goodIdQ });
  83. return (!result.errors?result.data:result.errors[0].message)
  84. }
  85. catch(e) {e}
  86. };
  87. console.log(gqlLogin("Olyatest3", "000"));
  88. console.log(gqlLogin("OlyaBrekh", "arriba"));
  89. console.log(gqlRegistration("OlyaBrekh", "arriba"));
  90. console.log(gqlCats());
  91. console.log(gqlCatById("5dc4b2553f23b553bf3540fc"));
  92. console.log(gqlGoodById("5dc45c3d5df9d670df48cc4a"));