connection.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import { NuxtAxiosInstance } from '@nuxtjs/axios'
  2. import { AxiosRequestConfig } from 'axios'
  3. import { AnyJson, DataPersisterArgs, DataProviderArgs, UrlArgs } from '~/types/interfaces'
  4. import { HTTP_METHOD } from '~/types/enums'
  5. /**
  6. * @category Services/connection
  7. * @class Connection
  8. *
  9. * Classe Wrapper du connecteur de requête (Axios dans notre cas)
  10. */
  11. class Connection {
  12. static connector: NuxtAxiosInstance;
  13. /**
  14. * Initialisation du connecteur (Axios dans notre cas)
  15. * @param {NuxtAxiosInstance} connector
  16. */
  17. static initConnector (connector: NuxtAxiosInstance) {
  18. Connection.connector = connector
  19. }
  20. /**
  21. * Main méthode qui appellera les méthodes privées correspondantes (getItem, getCollection, put, post, delete)
  22. * @param {HTTP_METHOD} method Mode de requêtage (GET, PUT, DELETE...)
  23. * @param {string} url
  24. * @param {DataProviderArgs|DataPersisterArgs} args
  25. * @return {Promise<any>}
  26. */
  27. public static invoke (method: HTTP_METHOD, url: string, args: UrlArgs): Promise<any> {
  28. switch (method) {
  29. case HTTP_METHOD.GET:
  30. if (args.id) {
  31. return Connection.getItem(url, args.id, args.showProgress)
  32. } else {
  33. return Connection.getCollection(url, args.showProgress)
  34. }
  35. case HTTP_METHOD.PUT:
  36. if (!Connection.isDataPersisterArgs(args)) {
  37. throw new Error('*args* is not a dataPersisterArgs')
  38. }
  39. if (!args.data) {
  40. throw new Error('*args* has no data')
  41. }
  42. return Connection.put(url, args.id, args.data, args.showProgress)
  43. case HTTP_METHOD.DELETE:
  44. return Connection.deleteItem(url, args.id, args.showProgress)
  45. }
  46. throw new Error('Unknown connection method was invoked')
  47. }
  48. /**
  49. * GET Item : préparation de la config pour la récupération d'un item
  50. * @param {string} url
  51. * @param {number} id
  52. * @param {boolean} showProgress
  53. * @return {Promise<any>}
  54. */
  55. public static getItem (url: string, id: number, showProgress: boolean = true): Promise<any> {
  56. const config: AxiosRequestConfig = {
  57. url: `${url}/${id}`,
  58. method: HTTP_METHOD.GET,
  59. progress: showProgress
  60. }
  61. return Connection.request(config)
  62. }
  63. /**
  64. * Get collection : préparation de la config pour la récupération d'une collection d'items
  65. * @param {string} url
  66. * @param {boolean} progress
  67. * @return {Promise<any>}
  68. */
  69. public static getCollection (url: string, progress: boolean = true): Promise<any> {
  70. const config: AxiosRequestConfig = {
  71. url: `${url}`,
  72. method: HTTP_METHOD.GET,
  73. progress
  74. }
  75. return Connection.request(config)
  76. }
  77. /**
  78. * Put : préparation de la config pour la mise à jour d'un item
  79. * @param {string} url
  80. * @param {number} id
  81. * @param {AnyJson} data
  82. * @param {boolean} progress
  83. * @return {Promise<any>}
  84. */
  85. public static put (url: string, id: number, data: AnyJson, progress: boolean = true): Promise<any> {
  86. const config: AxiosRequestConfig = {
  87. url: `${url}/${id}`,
  88. method: HTTP_METHOD.PUT,
  89. data,
  90. progress
  91. }
  92. return Connection.request(config)
  93. }
  94. /**
  95. * DELETE Item : préparation de la config pour la suppression d'un item
  96. * @param {string} url
  97. * @param {number} id
  98. * @param {boolean} progress
  99. * @return {Promise<any>}
  100. */
  101. public static deleteItem (url: string, id: number, progress: boolean = true): Promise<any> {
  102. const config: AxiosRequestConfig = {
  103. url: `${url}/${id}`,
  104. method: HTTP_METHOD.DELETE,
  105. progress
  106. }
  107. return Connection.request(config)
  108. }
  109. /**
  110. * Exécute la requete
  111. * @param {AxiosRequestConfig} config
  112. * @return {Promise<any>}
  113. */
  114. private static async request (config: AxiosRequestConfig): Promise<any> {
  115. return await Connection.connector.$request(config)
  116. }
  117. /**
  118. * Test si l'argument est bien de type DataPersister
  119. * @param args
  120. */
  121. private static isDataPersisterArgs (args: DataProviderArgs|DataPersisterArgs): args is DataPersisterArgs {
  122. return (args as DataPersisterArgs).data !== undefined
  123. }
  124. }
  125. export default Connection