Advertisement
Guest User

Untitled

a guest
Jul 16th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.60 KB | None | 0 0
  1. /* eslint-disable class-methods-use-this, no-underscore-dangle, arrow-parens, no-return-assign, no-sequences */
  2. import axios from 'axios'
  3. import cookie from 'js-cookie'
  4.  
  5. import { endpointApiUser } from '../../core/constants'
  6.  
  7.  
  8. const user = axios.create({
  9. baseURL: `${endpointApiUser}`,
  10. headers: {
  11. 'Content-Type': 'application/json',
  12. },
  13. transformRequest: [(postData = {}, headers) => {
  14. // eslint-disable-next-line no-param-reassign
  15. return JSON.stringify(postData)
  16. }],
  17. timeout: 3000,
  18. })
  19.  
  20.  
  21. type ResponseUserBalance = {
  22. balance: number,
  23. currency: string,
  24. taxDiscount: number,
  25. taxRate: number,
  26. };
  27.  
  28.  
  29. class User {
  30. constructor() {
  31. this.user = null
  32. this.token = cookie.get('token') || null
  33. this.tokenttl = parseInt(cookie.get('tokenttl'), 10) || 0
  34. }
  35.  
  36. _normalize = (responseUser) => ({
  37. email: responseUser.email,
  38. firstName: responseUser.firstName,
  39. lastName: responseUser.lastName,
  40. login: responseUser.username,
  41. session: responseUser.token,
  42. cps: responseUser.authorized,
  43. phone: responseUser.phone,
  44. bonuses: [],
  45. })
  46.  
  47. _normalizeBalance = (balance = {}) => ({
  48. balance: balance.balance || 0,
  49. currency: balance.currency || '',
  50. currencyId: null,
  51. country: null,
  52. messages: null,
  53. taxDiscount: balance.taxDiscount,
  54. taxRate: balance.taxDiscount,
  55. })
  56.  
  57. _handleToken(d) {
  58. this.token = `Bearer ${d.token}`
  59. this.tokenttl = +new Date() + d.ttl
  60. cookie.set('token', this.token, { expires: this.tokenttl })
  61. cookie.set('tokenttl', this.tokenttl, { expires: this.tokenttl })
  62. this.user = this._normalize(d)
  63.  
  64. return this.user
  65. }
  66.  
  67. _handleTokenError = (error) => {
  68. if (!error || !error.response) return Promise.reject(error)
  69.  
  70. const { data } = error.response
  71. const { invalidParameters } = data
  72.  
  73.  
  74. // return Promise.reject({ validationErrors, ...data })
  75.  
  76. return Promise.reject({
  77. messages: invalidParameters.reduce((text, it) => `${text}\n${it.name}: ${it.message}`, '')
  78. })
  79. }
  80.  
  81. signIn = (login, password) => user.post('/user/login', { login, password })
  82. .then((d) => this._handleToken(d.data))
  83. .catch((error) => this._handleTokenError(error))
  84.  
  85. signUp = (phone, email, promo, username, password) => user.post('/user/register', { phone, email, username, password })
  86. .then((d) => this._handleToken(d.data))
  87. .catch((error) => this._handleTokenError(error))
  88.  
  89. getUser = async () => {
  90. try {
  91. const userData = await this._checkTokenttl()
  92. const balance = await this._getBalance()
  93.  
  94. this.user = { ...userData, ...this._normalizeBalance(balance) }
  95.  
  96. return this.user
  97. }
  98. catch (error) {
  99. return Promise.reject(error)
  100. }
  101. }
  102.  
  103. signOut = () => {
  104. cookie.remove('token')
  105. this.token = null
  106. user.get('/user/logout', { headers: { Authorization: this.token }})
  107. .then(
  108. (data) => console.log(data),
  109. (error) => console.log(error),
  110. )
  111. return null
  112. }
  113.  
  114. loadStakeHistory = page => user.get(`history/bet?page=${page}&pageSize=10`, { headers: { Authorization: this.token}})
  115. .then(data => data.data)
  116. .catch(error => this._historyErrorConstructor(error))
  117.  
  118. loadHistory = page => user.get(`history/payment?page=${page}&pageSize=10`, { headers: { Authorization: this.token}})
  119. .then(data => data.data)
  120. .catch(error => this._historyErrorConstructor(error))
  121.  
  122. _historyErrorConstructor = (error) => {
  123. console.log(error)
  124. if (error && error.response) {
  125. const { data } = error.response
  126. const { invalidParameters } = data
  127. const validationErrors = {}
  128.  
  129. if (invalidParameters) {
  130. invalidParameters.map((field) => {
  131. validationErrors[field.name] = field.message
  132. return field
  133. })
  134. }
  135. return Promise.reject({ validationErrors, ...data })
  136. }
  137. }
  138.  
  139. _getBalance(): Promise<ResponseUserBalance> {
  140. return user.get('account/info', { headers: { Authorization: this.token }})
  141. .then((d) => d.data.accounts[0])
  142. }
  143.  
  144. _checkTokenttl() {
  145. if (this.tokenttl) {
  146. const leftTimeInMunites = (this.tokenttl - (new Date()).valueOf()) / 1000 / 60
  147.  
  148. if (leftTimeInMunites < 0) {
  149. return Promise.reject(new Error('время истекло, нужно перелогиниться'))
  150. }
  151.  
  152. // если осталось меньше 10 минут до истечения срока токена
  153. // или если информация о пользователе пуста
  154. if (leftTimeInMunites < 10 || !this.user) {
  155. return this._updateToken()
  156. }
  157. return Promise.resolve(this.user)
  158. }
  159. return Promise.reject(new Error('время истекло, нужно перелогиниться'))
  160. }
  161.  
  162. _updateToken = () => user.get('/user/token', { headers: { Authorization: this.token }})
  163. .then((d) => this._handleToken(d.data))
  164. .catch((error) => this._handleTokenError(error))
  165.  
  166. /*
  167. confirmationRequest = () => user.get('/user/phone/confirm')
  168. .then(
  169. (data) => data,
  170. (error) => console.log(error),
  171. )
  172.  
  173. confirmation = (code) => user.post('/user/phone/confirm', { code })
  174. .then(
  175. (data) => data,
  176. (error) => console.log(error),
  177. )
  178.  
  179. updateUser() {
  180. return user.get('/user')
  181. .then(
  182. (data) => {
  183. this.userInfo = this.userInfoConstructor(data.data)
  184.  
  185. return this.userInfo
  186. },
  187. (error) => console.log(error),
  188. )
  189. }
  190. */
  191. }
  192.  
  193. const userApi = new User()
  194.  
  195. export { userApi }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement