Basket.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. import { appApi } from 'src/boot/axios.js'
  2. import { Invoice } from 'src/models/Invoice.js'
  3. import APIRepository from '../classes/APIRepository.js'
  4. import { Basket, BasketList } from 'src/models/Basket.js'
  5. export default class BasketAPI extends APIRepository {
  6. constructor() {
  7. super('basket', appApi, '/store/baskets', Basket)
  8. this.APIAdresses = {
  9. base: '/store/baskets',
  10. checkoutReview: '/store/baskets/checkout_review',
  11. listOrders: '/store/baskets/list_orders',
  12. byId: (id) => '/store/baskets/' + id,
  13. send: (id) => '/store/baskets/' + id + '/send',
  14. setAddress: (id) => '/store/baskets/' + id + '/set_address',
  15. createInvoice: (id) => '/store/baskets/' + id + '/create_invoice',
  16. submitDiscountCode: (id) => '/store/baskets/' + id + '/submit_discount_code',
  17. removeDiscountCode: (id) => '/store/baskets/' + id + '/remove_discount_code',
  18. exportBasketReport: '/store/baskets/export_report'
  19. }
  20. this.CacheList = {
  21. base: this.name + this.APIAdresses.base
  22. }
  23. this.restUrl = (id) => this.APIAdresses.base + '/' + id
  24. /* Setting the callback functions for the CRUD operations. */
  25. this.setCrudCallbacks({
  26. get: (response) => { return new Basket(response.data) },
  27. post: (response) => { return new Basket(response.data) },
  28. put: (response) => { return new Basket(response.data) },
  29. delete: (response) => { return response.data }
  30. })
  31. }
  32. index(data) {
  33. return this.sendRequest({
  34. apiMethod: 'get',
  35. api: this.api,
  36. request: this.APIAdresses.base,
  37. data: this.getNormalizedSendData({
  38. category: null, // Number
  39. per_page: 10, // Number
  40. page: 1 // Number
  41. }, data),
  42. resolveCallback: (response) => {
  43. const paginate = response.data
  44. const results = response.data.results
  45. delete paginate.results
  46. return {
  47. list: new BasketList(results),
  48. paginate
  49. // {
  50. // "count": 1,
  51. // "num_pages": 1,
  52. // "per_page": 10,
  53. // "current": 1,
  54. // "next": null,
  55. // "previous": null,
  56. // }
  57. }
  58. },
  59. rejectCallback: (error) => {
  60. return error
  61. }
  62. })
  63. }
  64. listOrders(data) {
  65. return this.sendRequest({
  66. apiMethod: 'get',
  67. api: this.api,
  68. request: this.APIAdresses.listOrders,
  69. data: this.getNormalizedSendData({
  70. category: null, // Number
  71. per_page: 10, // Number
  72. page: 1 // Number
  73. }, data),
  74. resolveCallback: (response) => {
  75. const paginate = response.data
  76. const results = response.data.results
  77. delete paginate.results
  78. return {
  79. list: new BasketList(results),
  80. paginate
  81. // {
  82. // "count": 1,
  83. // "num_pages": 1,
  84. // "per_page": 10,
  85. // "current": 1,
  86. // "next": null,
  87. // "previous": null,
  88. // }
  89. }
  90. },
  91. rejectCallback: (error) => {
  92. return error
  93. }
  94. })
  95. }
  96. get (id) {
  97. return this.sendRequest({
  98. apiMethod: 'get',
  99. api: this.api,
  100. request: this.APIAdresses.byId(id),
  101. resolveCallback: (response) => {
  102. return new Basket(response.data)
  103. },
  104. rejectCallback: (error) => {
  105. return error
  106. }
  107. })
  108. }
  109. checkoutReview () {
  110. return this.sendRequest({
  111. apiMethod: 'get',
  112. api: this.api,
  113. request: this.APIAdresses.checkoutReview,
  114. resolveCallback: (response) => {
  115. return new Basket(response.data)
  116. },
  117. rejectCallback: (error) => {
  118. return error
  119. }
  120. })
  121. }
  122. setAddress (basketId, addressData) {
  123. return this.sendRequest({
  124. apiMethod: 'put',
  125. api: this.api,
  126. request: this.APIAdresses.setAddress(basketId),
  127. data: this.getNormalizedSendData({
  128. province: null, // String
  129. city: null, // String
  130. address: null, // String
  131. postal_code: null // String
  132. }, addressData),
  133. resolveCallback: (response) => {
  134. return new Basket(response.data)
  135. },
  136. rejectCallback: (error) => {
  137. return error
  138. }
  139. })
  140. }
  141. submitDiscountCode (basketId, code) {
  142. return this.sendRequest({
  143. apiMethod: 'put',
  144. api: this.api,
  145. request: this.APIAdresses.submitDiscountCode(basketId),
  146. data: this.getNormalizedSendData({
  147. code: null // String
  148. }, { code }),
  149. resolveCallback: (response) => {
  150. return new Basket(response.data)
  151. },
  152. rejectCallback: (error) => {
  153. return error
  154. }
  155. })
  156. }
  157. removeDiscountCode (basketId) {
  158. return this.sendRequest({
  159. apiMethod: 'put',
  160. api: this.api,
  161. request: this.APIAdresses.removeDiscountCode(basketId),
  162. resolveCallback: (response) => {
  163. return new Basket(response.data)
  164. },
  165. rejectCallback: (error) => {
  166. return error
  167. }
  168. })
  169. }
  170. send (basketId) {
  171. return this.sendRequest({
  172. apiMethod: 'put',
  173. api: this.api,
  174. request: this.APIAdresses.send(basketId),
  175. resolveCallback: (response) => {
  176. return new Basket(response.data)
  177. },
  178. rejectCallback: (error) => {
  179. return error
  180. }
  181. })
  182. }
  183. createInvoice (basketId, owner) {
  184. return this.sendRequest({
  185. apiMethod: 'put',
  186. api: this.api,
  187. request: this.APIAdresses.createInvoice(basketId),
  188. data: this.getNormalizedSendData({
  189. owner: null // String
  190. }, { owner }),
  191. resolveCallback: (response) => {
  192. return new Invoice(response.data)
  193. },
  194. rejectCallback: (error) => {
  195. return error
  196. }
  197. })
  198. }
  199. exportBasketReport(data) {
  200. return this.sendRequest({
  201. apiMethod: 'get',
  202. api: this.api,
  203. request: this.APIAdresses.exportBasketReport,
  204. data: this.getNormalizedSendData({
  205. report_type: null // String
  206. }, data),
  207. responseType: 'blob',
  208. resolveCallback: (response) => {
  209. return response.data // xlsxData
  210. },
  211. rejectCallback: (error) => {
  212. return error
  213. }
  214. })
  215. }
  216. }