From f2c7f7c2da7be67541c75d2019b9b25e7dd08c33 Mon Sep 17 00:00:00 2001 From: andrei Date: Mon, 2 Jun 2025 19:51:33 +0500 Subject: [PATCH] =?UTF-8?q?refactor:=20Api:=20=D0=98=D1=81=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20baseQu?= =?UTF-8?q?eryWithAuth?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web-app/src/Api/appointmentTypesApi.js | 14 +++-------- web-app/src/Api/appointmentsApi.js | 15 +++-------- web-app/src/Api/authApi.js | 28 +++------------------ web-app/src/Api/baseQuery.js | 25 ++++++++++++++++++ web-app/src/Api/lensIssuesApi.js | 13 +++------- web-app/src/Api/lensTypesApi.js | 13 +++------- web-app/src/Api/lensesApi.js | 15 +++-------- web-app/src/Api/patientsApi.js | 13 +++------- web-app/src/Api/scheduledAppointmentsApi.js | 15 +++-------- web-app/src/Api/setContentApi.js | 13 +++------- web-app/src/Api/setsApi.js | 13 +++------- web-app/src/Api/usersApi.js | 13 +++------- 12 files changed, 62 insertions(+), 128 deletions(-) create mode 100644 web-app/src/Api/baseQuery.js diff --git a/web-app/src/Api/appointmentTypesApi.js b/web-app/src/Api/appointmentTypesApi.js index 76fc18e..66c8314 100644 --- a/web-app/src/Api/appointmentTypesApi.js +++ b/web-app/src/Api/appointmentTypesApi.js @@ -1,16 +1,10 @@ -import {createApi, fetchBaseQuery} from "@reduxjs/toolkit/query/react"; -import CONFIG from "../Core/сonfig.js";3 +import {createApi} from "@reduxjs/toolkit/query/react"; +import {baseQueryWithAuth} from "./baseQuery.js"; + export const appointmentTypesApi = createApi({ reducerPath: 'appointmentTypesApi', - baseQuery: fetchBaseQuery({ - baseUrl: CONFIG.BASE_URL, - prepareHeaders: (headers) => { - const token = localStorage.getItem('access_token'); - if (token) headers.set('Authorization', `Bearer ${token}`); - return headers; - } - }), + baseQuery: baseQueryWithAuth, tagsTypes: ['AppointmentTypes'], endpoints: (builder) => ({ getAppointmentTypes: builder.query({ diff --git a/web-app/src/Api/appointmentsApi.js b/web-app/src/Api/appointmentsApi.js index d9990c8..e2db163 100644 --- a/web-app/src/Api/appointmentsApi.js +++ b/web-app/src/Api/appointmentsApi.js @@ -1,16 +1,9 @@ -import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react"; -import CONFIG from "../Core/сonfig.js"; +import {createApi} from "@reduxjs/toolkit/query/react"; +import {baseQueryWithAuth} from "./baseQuery.js"; export const appointmentsApi = createApi({ reducerPath: 'appointmentsApi', - baseQuery: fetchBaseQuery({ - baseUrl: CONFIG.BASE_URL, - prepareHeaders: (headers) => { - const token = localStorage.getItem('access_token'); - if (token) headers.set('Authorization', `Bearer ${token}`); - return headers; - }, - }), + baseQuery: baseQueryWithAuth, tagTypes: ['Appointment'], endpoints: (builder) => ({ getAppointments: builder.query({ @@ -32,7 +25,7 @@ export const appointmentsApi = createApi({ invalidatesTags: ['Appointment'], }), updateAppointment: builder.mutation({ - query: ({ id, data }) => ({ + query: ({id, data}) => ({ url: `/appointments/${id}/`, method: 'PUT', body: data, diff --git a/web-app/src/Api/authApi.js b/web-app/src/Api/authApi.js index c8f5260..27ef36b 100644 --- a/web-app/src/Api/authApi.js +++ b/web-app/src/Api/authApi.js @@ -1,28 +1,6 @@ -import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react"; -import { logout } from "../Redux/Slices/authSlice.js"; -import CONFIG from "../Core/сonfig.js"; +import {createApi} from "@reduxjs/toolkit/query/react"; +import {baseQueryWithAuth} from "./baseQuery.js"; -const baseQuery = fetchBaseQuery({ - baseUrl: CONFIG.BASE_URL, - prepareHeaders: (headers) => { - const token = localStorage.getItem("access_token"); - if (token) { - headers.set("Authorization", `Bearer ${token}`); - } - headers.set("Content-Type", "application/json"); - return headers; - }, -}); - -const baseQueryWithAuth = async (args, api, extraOptions) => { - const result = await baseQuery(args, api, extraOptions); - if (result.error && result.error.status === 401) { - localStorage.removeItem("access_token"); - api.dispatch(logout()); - window.location.href = "/login"; - } - return result; -}; export const authApi = createApi({ reducerPath: "authApi", @@ -38,4 +16,4 @@ export const authApi = createApi({ }), }); -export const { useLoginMutation } = authApi; \ No newline at end of file +export const {useLoginMutation} = authApi; \ No newline at end of file diff --git a/web-app/src/Api/baseQuery.js b/web-app/src/Api/baseQuery.js new file mode 100644 index 0000000..ab6d222 --- /dev/null +++ b/web-app/src/Api/baseQuery.js @@ -0,0 +1,25 @@ +import { fetchBaseQuery } from '@reduxjs/toolkit/query/react'; +import { logout } from '../Redux/Slices/authSlice.js'; +import CONFIG from "../Core/сonfig.js"; + +export const baseQuery = fetchBaseQuery({ + baseUrl: CONFIG.BASE_URL, + prepareHeaders: (headers) => { + const token = localStorage.getItem('access_token'); + if (token) { + headers.set('Authorization', `Bearer ${token}`); + } + headers.set('Content-Type', 'application/json'); + return headers; + }, +}); + +export const baseQueryWithAuth = async (args, api, extraOptions) => { + const result = await baseQuery(args, api, extraOptions); + if (result.error && result.error.status === 401) { + localStorage.removeItem('access_token'); + api.dispatch(logout()); + window.location.href = '/login'; + } + return result; +}; \ No newline at end of file diff --git a/web-app/src/Api/lensIssuesApi.js b/web-app/src/Api/lensIssuesApi.js index da2944c..979a900 100644 --- a/web-app/src/Api/lensIssuesApi.js +++ b/web-app/src/Api/lensIssuesApi.js @@ -1,17 +1,10 @@ -import {createApi, fetchBaseQuery} from "@reduxjs/toolkit/query/react"; -import CONFIG from "../Core/сonfig.js"; +import {createApi} from "@reduxjs/toolkit/query/react"; +import {baseQueryWithAuth} from "./baseQuery.js"; export const lensIssuesApi = createApi({ reducerPath: 'lensIssuesApi', - baseQuery: fetchBaseQuery({ - baseUrl: CONFIG.BASE_URL, - prepareHeaders: (headers) => { - const token = localStorage.getItem('access_token'); - if (token) headers.set('Authorization', `Bearer ${token}`); - return headers; - } - }), + baseQuery: baseQueryWithAuth, tagTypes: ['LensIssues'], endpoints: (builder) => ({ getLensIssues: builder.query({ diff --git a/web-app/src/Api/lensTypesApi.js b/web-app/src/Api/lensTypesApi.js index e38df51..db9ff6b 100644 --- a/web-app/src/Api/lensTypesApi.js +++ b/web-app/src/Api/lensTypesApi.js @@ -1,17 +1,10 @@ -import CONFIG from "../Core/сonfig.js"; -import {createApi, fetchBaseQuery} from "@reduxjs/toolkit/query/react"; +import {createApi} from "@reduxjs/toolkit/query/react"; +import {baseQueryWithAuth} from "./baseQuery.js"; export const lensTypesApi = createApi({ reducerPath: 'lensTypesApi', - baseQuery: fetchBaseQuery({ - baseUrl: CONFIG.BASE_URL, - prepareHeaders: (headers) => { - const token = localStorage.getItem('access_token'); - if (token) headers.set('Authorization', `Bearer ${token}`); - return headers; - } - }), + baseQuery: baseQueryWithAuth, endpoints: (builder) => ({ getLensTypes: builder.query({ query: () => `/lens_types/`, diff --git a/web-app/src/Api/lensesApi.js b/web-app/src/Api/lensesApi.js index 374a9a9..52e932d 100644 --- a/web-app/src/Api/lensesApi.js +++ b/web-app/src/Api/lensesApi.js @@ -1,17 +1,10 @@ -import {createApi, fetchBaseQuery} from "@reduxjs/toolkit/query/react"; -import CONFIG from "../Core/сonfig.js"; +import {createApi} from "@reduxjs/toolkit/query/react"; +import {baseQueryWithAuth} from "./baseQuery.js"; export const lensesApi = createApi({ reducerPath: 'lensesApi', - baseQuery: fetchBaseQuery({ - baseUrl: CONFIG.BASE_URL, - prepareHeaders: (headers) => { - const token = localStorage.getItem('access_token'); - if (token) headers.set('Authorization', `Bearer ${token}`); - return headers; - } - }), + baseQuery: baseQueryWithAuth, tagTypes: ['Lens'], endpoints: (builder) => ({ getLenses: builder.query({ @@ -33,7 +26,7 @@ export const lensesApi = createApi({ invalidatesTags: ['Lens'] }), updateLens: builder.mutation({ - query: ({ id, ...lens }) => ({ + query: ({id, ...lens}) => ({ url: `/lenses/${id}/`, method: 'PUT', body: lens diff --git a/web-app/src/Api/patientsApi.js b/web-app/src/Api/patientsApi.js index 877b8a5..2350417 100644 --- a/web-app/src/Api/patientsApi.js +++ b/web-app/src/Api/patientsApi.js @@ -1,16 +1,9 @@ -import {createApi, fetchBaseQuery} from '@reduxjs/toolkit/query/react' -import CONFIG from "../Core/сonfig.js"; +import {createApi} from '@reduxjs/toolkit/query/react' +import {baseQueryWithAuth} from "./baseQuery.js"; export const patientsApi = createApi({ reducerPath: 'patientsApi', - baseQuery: fetchBaseQuery({ - baseUrl: CONFIG.BASE_URL, - prepareHeaders: (headers) => { - const token = localStorage.getItem('access_token'); - if (token) headers.set('Authorization', `Bearer ${token}`); - return headers; - } - }), + baseQuery: baseQueryWithAuth, tagTypes: ['Patient'], endpoints: (builder) => ({ getPatients: builder.query({ diff --git a/web-app/src/Api/scheduledAppointmentsApi.js b/web-app/src/Api/scheduledAppointmentsApi.js index cb06c0d..c4b232c 100644 --- a/web-app/src/Api/scheduledAppointmentsApi.js +++ b/web-app/src/Api/scheduledAppointmentsApi.js @@ -1,16 +1,9 @@ -import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react"; -import CONFIG from "../Core/сonfig.js"; +import {createApi} from "@reduxjs/toolkit/query/react"; +import {baseQueryWithAuth} from "./baseQuery.js"; export const scheduledAppointmentsApi = createApi({ reducerPath: 'scheduledAppointmentsApi', - baseQuery: fetchBaseQuery({ - baseUrl: CONFIG.BASE_URL, - prepareHeaders: (headers) => { - const token = localStorage.getItem('access_token'); - if (token) headers.set('Authorization', `Bearer ${token}`); - return headers; - }, - }), + baseQuery: baseQueryWithAuth, tagTypes: ['ScheduledAppointment'], endpoints: (builder) => ({ getScheduledAppointments: builder.query({ @@ -26,7 +19,7 @@ export const scheduledAppointmentsApi = createApi({ invalidatesTags: ['ScheduledAppointment'], }), updateScheduledAppointment: builder.mutation({ - query: ({ id, data }) => ({ + query: ({id, data}) => ({ url: `/scheduled_appointments/${id}/`, method: 'PUT', body: data, diff --git a/web-app/src/Api/setContentApi.js b/web-app/src/Api/setContentApi.js index b296981..3033d2a 100644 --- a/web-app/src/Api/setContentApi.js +++ b/web-app/src/Api/setContentApi.js @@ -1,16 +1,9 @@ -import {createApi, fetchBaseQuery} from '@reduxjs/toolkit/query/react'; -import CONFIG from "../Core/сonfig.js"; +import {createApi} from '@reduxjs/toolkit/query/react'; +import {baseQueryWithAuth} from "./baseQuery.js"; export const setContentApi = createApi({ reducerPath: 'setContentApi', - baseQuery: fetchBaseQuery({ - baseUrl: CONFIG.BASE_URL, - prepareHeaders: (headers) => { - const token = localStorage.getItem('access_token'); - if (token) headers.set('Authorization', `Bearer ${token}`); - return headers; - } - }), + baseQuery: baseQueryWithAuth, tagTypes: ['SetContent'], endpoints: (builder) => ({ getSetContent: builder.query({ diff --git a/web-app/src/Api/setsApi.js b/web-app/src/Api/setsApi.js index 616b836..245cc53 100644 --- a/web-app/src/Api/setsApi.js +++ b/web-app/src/Api/setsApi.js @@ -1,16 +1,9 @@ -import {createApi, fetchBaseQuery} from '@reduxjs/toolkit/query/react' -import CONFIG from "../Core/сonfig.js"; +import {createApi} from '@reduxjs/toolkit/query/react' +import {baseQueryWithAuth} from "./baseQuery.js"; export const setsApi = createApi({ reducerPath: 'setsApi', - baseQuery: fetchBaseQuery({ - baseUrl: CONFIG.BASE_URL, - prepareHeaders: (headers) => { - const token = localStorage.getItem('access_token'); - if (token) headers.set('Authorization', `Bearer ${token}`); - return headers; - } - }), + baseQuery: baseQueryWithAuth, tagTypes: ['Set'], endpoints: (builder) => ({ getSets: builder.query({ diff --git a/web-app/src/Api/usersApi.js b/web-app/src/Api/usersApi.js index 56b9f04..22a80c2 100644 --- a/web-app/src/Api/usersApi.js +++ b/web-app/src/Api/usersApi.js @@ -1,17 +1,10 @@ -import {createApi, fetchBaseQuery} from "@reduxjs/toolkit/query/react"; -import CONFIG from "../Core/сonfig.js"; +import {createApi} from "@reduxjs/toolkit/query/react"; +import {baseQueryWithAuth} from "./baseQuery.js"; export const usersApi = createApi({ reducerPath: 'usersApi', - baseQuery: fetchBaseQuery({ - baseUrl: CONFIG.BASE_URL, - prepareHeaders: (headers) => { - const token = localStorage.getItem('access_token'); - if (token) headers.set('Authorization', `Bearer ${token}`); - return headers; - }, - }), + baseQuery: baseQueryWithAuth, tagTypes: ['User'], endpoints: (builder) => ({ getAuthenticatedUserData: builder.query({