feat: Set up RTK query for the statemanagement
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
|
||||
|
||||
export const cropApi = createApi({
|
||||
reducerPath: "cropApi",
|
||||
baseQuery: fetchBaseQuery({
|
||||
baseUrl: "http://localhost:8000/api/v1/crop",
|
||||
credentials: "include", // Ensures credentials (cookies, tokens) are included
|
||||
}),
|
||||
tagTypes: ["Crops"],
|
||||
endpoints: (builder) => ({
|
||||
getCropsByFarm: builder.query({
|
||||
query: (farmId) => `/farm/${farmId}`,
|
||||
providesTags: ["Crops"],
|
||||
}),
|
||||
getCropById: builder.query({
|
||||
query: (cropId) => `/${cropId}`,
|
||||
providesTags: (result, error, cropId) => [{ type: "Crops", id: cropId }],
|
||||
}),
|
||||
createCrop: builder.mutation({
|
||||
query: (formData) => ({
|
||||
url: "/",
|
||||
method: "POST",
|
||||
body: formData,
|
||||
}),
|
||||
invalidatesTags: ["Crops"],
|
||||
}),
|
||||
updateCrop: builder.mutation({
|
||||
query: ({ cropId, updatedCrop }) => ({
|
||||
url: `/${cropId}`,
|
||||
method: "PUT",
|
||||
body: updatedCrop,
|
||||
}),
|
||||
invalidatesTags: (result, error, { cropId }) => [
|
||||
{ type: "Crops", id: cropId },
|
||||
],
|
||||
}),
|
||||
deleteCrop: builder.mutation({
|
||||
query: (cropId) => ({
|
||||
url: `/${cropId}`,
|
||||
method: "DELETE",
|
||||
}),
|
||||
invalidatesTags: ["Crops"],
|
||||
}),
|
||||
updateHealthStatus: builder.mutation({
|
||||
query: ({ cropId, healthStatus }) => ({
|
||||
url: `/health/${cropId}`,
|
||||
method: "PUT",
|
||||
body: { healthStatus },
|
||||
}),
|
||||
invalidatesTags: (result, error, { cropId }) => [
|
||||
{ type: "Crops", id: cropId },
|
||||
],
|
||||
}),
|
||||
updateGrowthStage: builder.mutation({
|
||||
query: ({ cropId, growthStage }) => ({
|
||||
url: `/growth/${cropId}`,
|
||||
method: "PUT",
|
||||
body: { growthStage },
|
||||
}),
|
||||
invalidatesTags: (result, error, { cropId }) => [
|
||||
{ type: "Crops", id: cropId },
|
||||
],
|
||||
}),
|
||||
cropHarvest: builder.query({
|
||||
query: (cropId) => `/harvest/${cropId}`,
|
||||
}),
|
||||
suggestNextCrop: builder.query({
|
||||
query: (cropId) => `/nextCrop/${cropId}`,
|
||||
}),
|
||||
suggestPesticides: builder.query({
|
||||
query: (cropId) => `/pesticides/${cropId}`,
|
||||
}),
|
||||
suggestFertilizers: builder.query({
|
||||
query: (cropId) => `/fertilizers/${cropId}`,
|
||||
}),
|
||||
}),
|
||||
});
|
||||
|
||||
export const {
|
||||
useGetCropsByFarmQuery,
|
||||
useGetCropByIdQuery,
|
||||
useCreateCropMutation,
|
||||
useUpdateCropMutation,
|
||||
useDeleteCropMutation,
|
||||
useUpdateHealthStatusMutation,
|
||||
useUpdateGrowthStageMutation,
|
||||
useCropHarvestQuery,
|
||||
useSuggestNextCropQuery,
|
||||
useSuggestPesticidesQuery,
|
||||
useSuggestFertilizersQuery,
|
||||
} = cropApi;
|
||||
@@ -0,0 +1,56 @@
|
||||
import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
|
||||
|
||||
export const farmApi = createApi({
|
||||
reducerPath: "farmApi",
|
||||
baseQuery: fetchBaseQuery({
|
||||
baseUrl: "http://localhost:8000/api/v1/farm",
|
||||
credentials: "include",
|
||||
}),
|
||||
tagTypes: ["Farms"],
|
||||
endpoints: (builder) => ({
|
||||
getFarms: builder.query({
|
||||
query: () => "/",
|
||||
providesTags: ["Farms"],
|
||||
}),
|
||||
getFarmById: builder.query({
|
||||
query: (farmId) => `/${farmId}`,
|
||||
providesTags: ["Farms"],
|
||||
}),
|
||||
createFarm: builder.mutation({
|
||||
query: (newFarm) => ({
|
||||
url: "/",
|
||||
method: "POST",
|
||||
body: newFarm,
|
||||
credentials: "include",
|
||||
}),
|
||||
invalidatesTags: ["Farms"],
|
||||
}),
|
||||
updateFarm: builder.mutation({
|
||||
query: ({ farmId, updatedFarm }) => ({
|
||||
url: `/${farmId}`,
|
||||
method: "PUT",
|
||||
body: updatedFarm,
|
||||
credentials: "include",
|
||||
}),
|
||||
invalidatesTags: (result, error, { farmId }) => [
|
||||
{ type: "Farms", id: farmId },
|
||||
],
|
||||
}),
|
||||
deleteFarm: builder.mutation({
|
||||
query: (farmId) => ({
|
||||
url: `/${farmId}`,
|
||||
method: "DELETE",
|
||||
credentials: "include",
|
||||
}),
|
||||
invalidatesTags: ["Farms"],
|
||||
}),
|
||||
}),
|
||||
});
|
||||
|
||||
export const {
|
||||
useGetFarmsQuery,
|
||||
useGetFarmByIdQuery,
|
||||
useCreateFarmMutation,
|
||||
useUpdateFarmMutation,
|
||||
useDeleteFarmMutation,
|
||||
} = farmApi;
|
||||
@@ -0,0 +1,56 @@
|
||||
import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
|
||||
|
||||
export const financeApi = createApi({
|
||||
reducerPath: "financeApi",
|
||||
baseQuery: fetchBaseQuery({
|
||||
baseUrl: "http://localhost:8000/api/v1/finance",
|
||||
credentials: "include",
|
||||
}),
|
||||
tagTypes: ["Finance", "Transactions"],
|
||||
endpoints: (builder) => ({
|
||||
getFinanceByFarm: builder.query({
|
||||
query: (farmId) => `/${farmId}`,
|
||||
providesTags: ["Finance"],
|
||||
}),
|
||||
getTransactions: builder.query({
|
||||
query: (financeId) => `/transactions/${financeId}`,
|
||||
providesTags: ["Transactions"],
|
||||
}),
|
||||
getFinancialSummary: builder.query({
|
||||
query: (financeId) => `/summary/${financeId}`,
|
||||
providesTags: ["Finance"],
|
||||
}),
|
||||
createFinance: builder.mutation({
|
||||
query: (financeData) => ({
|
||||
url: "/",
|
||||
method: "POST",
|
||||
body: financeData,
|
||||
}),
|
||||
invalidatesTags: ["Finance"],
|
||||
}),
|
||||
deleteTransaction: builder.mutation({
|
||||
query: (financeId) => ({
|
||||
url: `/${financeId}`,
|
||||
method: "DELETE",
|
||||
}),
|
||||
invalidatesTags: ["Transactions", "Finance"],
|
||||
}),
|
||||
addTransaction: builder.mutation({
|
||||
query: ({ financeId, transactionData }) => ({
|
||||
url: `/${financeId}/transaction`,
|
||||
method: "POST",
|
||||
body: transactionData,
|
||||
}),
|
||||
invalidatesTags: ["Transactions", "Finance"],
|
||||
}),
|
||||
}),
|
||||
});
|
||||
|
||||
export const {
|
||||
useGetFinanceByFarmQuery,
|
||||
useGetTransactionsQuery,
|
||||
useGetFinancialSummaryQuery,
|
||||
useCreateFinanceMutation,
|
||||
useDeleteTransactionMutation,
|
||||
useAddTransactionMutation,
|
||||
} = financeApi;
|
||||
@@ -0,0 +1,64 @@
|
||||
import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
|
||||
|
||||
export const taskApi = createApi({
|
||||
reducerPath: "taskApi",
|
||||
baseQuery: fetchBaseQuery({
|
||||
baseUrl: "http://localhost:8000/api/v1/task",
|
||||
credentials: "include",
|
||||
}),
|
||||
tagTypes: ["Tasks"],
|
||||
endpoints: (builder) => ({
|
||||
getTasksByFarm: builder.query({
|
||||
query: (farmId) => `/farm/${farmId}`,
|
||||
providesTags: ["Tasks"],
|
||||
}),
|
||||
getTaskById: builder.query({
|
||||
query: (taskId) => `/${taskId}`,
|
||||
providesTags: (result, error, taskId) => [{ type: "Tasks", id: taskId }],
|
||||
}),
|
||||
createTask: builder.mutation({
|
||||
query: (taskData) => ({
|
||||
url: "/",
|
||||
method: "POST",
|
||||
body: taskData,
|
||||
}),
|
||||
invalidatesTags: ["Tasks"],
|
||||
}),
|
||||
updateTask: builder.mutation({
|
||||
query: ({ taskId, updatedTask }) => ({
|
||||
url: `/${taskId}`,
|
||||
method: "PUT",
|
||||
body: updatedTask,
|
||||
}),
|
||||
invalidatesTags: (result, error, { taskId }) => [
|
||||
{ type: "Tasks", id: taskId },
|
||||
],
|
||||
}),
|
||||
updateTaskStatus: builder.mutation({
|
||||
query: ({ taskId, status }) => ({
|
||||
url: `/${taskId}/status`,
|
||||
method: "PATCH",
|
||||
body: { status },
|
||||
}),
|
||||
invalidatesTags: (result, error, { taskId }) => [
|
||||
{ type: "Tasks", id: taskId },
|
||||
],
|
||||
}),
|
||||
deleteTask: builder.mutation({
|
||||
query: (taskId) => ({
|
||||
url: `/${taskId}`,
|
||||
method: "DELETE",
|
||||
}),
|
||||
invalidatesTags: ["Tasks"],
|
||||
}),
|
||||
}),
|
||||
});
|
||||
|
||||
export const {
|
||||
useGetTasksByFarmQuery,
|
||||
useGetTaskByIdQuery,
|
||||
useCreateTaskMutation,
|
||||
useUpdateTaskMutation,
|
||||
useUpdateTaskStatusMutation,
|
||||
useDeleteTaskMutation,
|
||||
} = taskApi;
|
||||
@@ -2,13 +2,27 @@ import { configureStore } from "@reduxjs/toolkit";
|
||||
import userSlice from "./userSlice";
|
||||
import messageSlice from "./messageSlice";
|
||||
import loaderSlice from "./loaderSlice";
|
||||
import { farmApi } from "./api/farmApi";
|
||||
import { cropApi } from "./api/cropApi";
|
||||
import { financeApi } from "./api/financeApi";
|
||||
import { taskApi } from "./api/taskApi";
|
||||
|
||||
const MentifyStore = configureStore({
|
||||
reducer: {
|
||||
user: userSlice.reducer,
|
||||
messages: messageSlice.reducer,
|
||||
loader: loaderSlice.reducer,
|
||||
[farmApi.reducerPath]: farmApi.reducer,
|
||||
[cropApi.reducerPath]: cropApi.reducer,
|
||||
[financeApi.reducerPath]: financeApi.reducer,
|
||||
[taskApi.reducerPath]: taskApi.reducer,
|
||||
},
|
||||
middleware: (getDefaultMiddleware) =>
|
||||
getDefaultMiddleware()
|
||||
.concat(farmApi.middleware)
|
||||
.concat(cropApi.middleware)
|
||||
.concat(financeApi.middleware)
|
||||
.concat(taskApi.middleware), // Add API middleware
|
||||
});
|
||||
|
||||
export default MentifyStore;
|
||||
|
||||
Reference in New Issue
Block a user