feat: Set up RTK query for the statemanagement

This commit is contained in:
2025-03-25 17:48:15 +05:30
parent 7e204690d3
commit 914501036d
70 changed files with 141275 additions and 205 deletions
+91
View File
@@ -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;
+56
View File
@@ -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;
+56
View File
@@ -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;
+64
View File
@@ -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;
+14
View File
@@ -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;