useAp2iRequestService.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import {useProfileAccessStore} from "~/store/profile/access";
  2. import {FetchContext, FetchOptions} from "ohmyfetch";
  3. import Page from "~/services/store/page";
  4. import {TYPE_ALERT} from "~/types/enums";
  5. import {useRuntimeConfig} from "#app";
  6. import OhMyFetchConnector from "~/services/data/connector/ohMyFetchConnector";
  7. import ApiRequestService from "~/services/data/apiRequestService";
  8. /**
  9. * Retourne une instance de ApiRequestService configurée pour interroger l'api Ap2i
  10. *
  11. * @see https://github.com/unjs/ohmyfetch/blob/main/README.md#%EF%B8%8F-create-fetch-with-default-options
  12. */
  13. export const useAp2iRequestService = () => {
  14. const runtimeConfig = useRuntimeConfig()
  15. /**
  16. * Peuple les headers avant l'envoi de la requête
  17. *
  18. * @param request
  19. * @param options
  20. */
  21. // const onRequest = async function ({ request, options }: FetchContext) {
  22. // // @ts-ignore
  23. // if(options && options.noXaccessId) {
  24. // return
  25. // }
  26. //
  27. // request = request as Request
  28. //
  29. // console.log(request, options)
  30. //
  31. // const profileAccessStore = useProfileAccessStore()
  32. // request.headers.set('x-accessid', String(profileAccessStore.id))
  33. // request.headers.set('Authorization', 'BEARER ' + profileAccessStore.bearer)
  34. //
  35. // if (profileAccessStore.switchId) {
  36. // request.headers.set('x-switch-user', String(profileAccessStore.switchId))
  37. // }
  38. // }
  39. /**
  40. * Gère les erreurs retournées par l'api
  41. *
  42. * @param request
  43. * @param response
  44. * @param error
  45. */
  46. const onResponseError = async function ({ request, response, error }: FetchContext) {
  47. if (response && response.status === 401) {
  48. navigateTo('/login')
  49. }
  50. if (response && response.status === 403) {
  51. new Page().addAlerts(TYPE_ALERT.ALERT, ['forbidden'])
  52. }
  53. if (response && response.status === 500) {
  54. new Page().addAlerts(TYPE_ALERT.ALERT, [error ? error.message : response.statusText])
  55. }
  56. }
  57. const config : FetchOptions = {
  58. baseURL: runtimeConfig.baseUrl ?? runtimeConfig.public.baseUrl,
  59. onRequest,
  60. onResponseError
  61. }
  62. // Utilise la fonction `create` de ohmyfetch pour générer un fetcher dédié à l'interrogation de Ap2i
  63. const fetcher = $fetch.create(config)
  64. const connector = new OhMyFetchConnector(fetcher)
  65. return new ApiRequestService(connector)
  66. }