index.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. const getGQL = (url: string) => async (query: string, variables: any) => {
  2. try {
  3. const token: string = localStorage.token ? localStorage.token : '';
  4. const res = await fetch(url, {
  5. method: 'POST',
  6. headers: {
  7. 'Content-Type': 'application/json',
  8. Authorization: 'Bearer ' + token,
  9. },
  10. body: JSON.stringify({ query, variables }),
  11. });
  12. return res.json();
  13. } catch (e) {
  14. return e;
  15. }
  16. };
  17. const gql = getGQL('http://shop-roles.asmer.fs.a-level.com.ua/graphql');
  18. const loginGQL = async <T>(
  19. login: string,
  20. password: string,
  21. ): Promise<T | null> => {
  22. try {
  23. const { data } = await gql(
  24. `
  25. query log($login:String, $password:String){
  26. login(login:$login, password:$password)
  27. }`,
  28. { login, password },
  29. );
  30. const token = data.login;
  31. if (token) localStorage.token = token;
  32. return token;
  33. } catch (e) {
  34. return null;
  35. }
  36. };
  37. const registerGQL = async <T>(
  38. login: string,
  39. password: string,
  40. ): Promise<T | null> => {
  41. try {
  42. const { data } = await gql(
  43. `mutation register($login:String, $password:String){
  44. UserUpsert(user: {login:$login, password:$password}){
  45. _id,login
  46. }
  47. }`,
  48. { login, password },
  49. );
  50. return data.UserUpsert;
  51. } catch (e) {
  52. return null;
  53. }
  54. };
  55. const categoriesGQL = async <T>(): Promise<T | null> => {
  56. try {
  57. const { data } = await gql(
  58. `query allCategories{
  59. CategoryFind(query:"[{}]"){
  60. _id,
  61. name,
  62. createdAt
  63. }
  64. }`,
  65. {},
  66. );
  67. return data.CategoryFind;
  68. } catch (e) {
  69. return null;
  70. }
  71. };
  72. const goodsGQL = async <T>(): Promise<T | null> => {
  73. try {
  74. const { data } = await gql(
  75. `query allGoods{
  76. GoodFind(query:"[{}]"){
  77. _id
  78. name,
  79. createdAt,
  80. price,
  81. images {
  82. url
  83. }
  84. }
  85. }`,
  86. {},
  87. );
  88. return data.GoodFind;
  89. } catch (e) {
  90. return null;
  91. }
  92. };
  93. const categoryById = async <T>(_id: string): Promise<T | null> => {
  94. try {
  95. const { data } = await gql(
  96. `query categoryById($id:String){
  97. CategoryFindOne(query:$id){
  98. _id,name,createdAt,
  99. goods {
  100. _id,createdAt,name
  101. }
  102. },
  103. }`,
  104. { id: JSON.stringify([{ _id }]) },
  105. );
  106. return data.CategoryFindOne;
  107. } catch (e) {
  108. return null;
  109. }
  110. };
  111. const goodById = async <T>(_id: string): Promise<T | null> => {
  112. try {
  113. const { data } = await gql(
  114. `query findById($id:String){
  115. GoodFindOne (query:$id){
  116. _id createdAt name price description images {
  117. url
  118. }
  119. }
  120. }`,
  121. { id: JSON.stringify([{ _id }]) },
  122. );
  123. return data.GoodFindOne;
  124. } catch (e) {
  125. return null;
  126. }
  127. };
  128. const ordersGQL = async <T>(): Promise<T | null> => {
  129. try {
  130. const { data } = await gql(
  131. `query orders {
  132. OrderFind(query:"[{}]")
  133. {
  134. _id
  135. createdAt
  136. total
  137. orderGoods {
  138. price
  139. count
  140. total
  141. good {
  142. name
  143. }
  144. }
  145. }
  146. }`,
  147. {},
  148. );
  149. return data.OrderFind;
  150. } catch (e) {
  151. return null;
  152. }
  153. };
  154. const orderById = async <T>(_id: string): Promise<T | null> => {
  155. try {
  156. const { data } = await gql(
  157. `query findById($id:String){
  158. OrderFindOne (query:$id){
  159. _id createdAt
  160. }
  161. }`,
  162. { id: JSON.stringify([{ _id }]) },
  163. );
  164. return data.OrderFindOne;
  165. } catch (e) {
  166. return null;
  167. }
  168. };
  169. const makeOrderById = async <T>(id: string): Promise<T | null> => {
  170. try {
  171. const { data } = await gql(
  172. ` mutation makeOrder($id:ID){
  173. OrderUpsert(order:{
  174. orderGoods:[
  175. {count:1,good:{_id:$id}}
  176. ]
  177. }){
  178. _id,createdAt,total
  179. }
  180. }`,
  181. { id },
  182. );
  183. return data.OrderUpsert;
  184. } catch (e) {
  185. return null;
  186. }
  187. };
  188. export {
  189. loginGQL,
  190. registerGQL,
  191. categoriesGQL,
  192. goodsGQL,
  193. categoryById,
  194. goodById,
  195. ordersGQL,
  196. orderById,
  197. makeOrderById,
  198. };