Akademy Landing MPA

This commit is contained in:
2025-06-09 20:49:38 +05:30
parent 8c3382e438
commit 14d7041e87
522 changed files with 43436 additions and 12935 deletions

View File

@@ -0,0 +1,288 @@
import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
import { isAxiosError } from "axios";
import { axiosBuzz, axiosBuzzOne } from "../utils/axios";
export const getAkademyPlans = createAsyncThunk(
`COMMON/akademy/plans`,
async (payload) => {
try {
const response = await axiosBuzzOne({
method: "GET",
url: "/akademy/subscriptions/plans",
});
return response.data;
} catch (err) {
console.log(err);
if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong");
throw err;
}
}
);
export const getAkademyClasses = createAsyncThunk(
`COMMON/akademy/classes`,
async (payload) => {
try {
const response = await axiosBuzzOne({
method: "GET",
url: "/akademy/bcc/school/classes",
});
return response.data;
} catch (err) {
console.log(err);
if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong");
throw err;
}
}
);
export const createPurchase = createAsyncThunk(
`PURCHASE:POST/akademy/purchase`,
async (payload) => {
try {
const response = await axiosBuzzOne({
method: "POST",
url: "/akademy/subscriptions/purchase",
});
return response.data;
} catch (err) {
console.log(err);
if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong");
throw err;
}
}
);
export const updatePurchase = createAsyncThunk(
`PURCHASE:PUT/akademy/purchase`,
async (payload, { getState, dispatch }) => {
const { purchase } = getState();
try {
const response = await axiosBuzzOne({
method: "PUT",
url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart`,
data: payload,
});
dispatch(getPurchaseDetails());
return response.data;
} catch (err) {
console.log(err);
if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong");
throw err;
}
}
);
export const removeItemFromCart = createAsyncThunk(
`PURCHASE:DELETE/akademy/purchase`,
async (payload, { getState, dispatch }) => {
const { cartItemId } = payload;
const { purchase } = getState();
try {
const response = await axiosBuzzOne({
method: "DELETE",
url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart/${cartItemId}`,
data: payload,
});
dispatch(getPurchaseDetails());
return response.data;
} catch (err) {
console.log(err);
if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong");
throw err;
}
}
);
export const getPurchaseDetails = createAsyncThunk(
`PURCHASE:GET/akademy/purchase`,
async (payload, { getState }) => {
const { purchase } = getState();
try {
const response = await axiosBuzzOne({
method: "GET",
url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart`,
});
return response.data;
} catch (err) {
console.log(err);
if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong");
throw err;
}
}
);
export const initiatePayment = createAsyncThunk(
`PURCHASE:POST/akademy/purchase/initiatePayment`,
async (payload, { getState }) => {
const { purchase } = getState();
try {
const response = await axiosBuzzOne({
method: "POST",
url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart/checkout`,
});
return response.data;
} catch (err) {
console.log(err);
if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong");
throw err;
}
}
);
export const verifyPayment = createAsyncThunk(
`PURCHASE:POST/akademy/purchase/verifyPayment`,
async (payload) => {
try {
const response = await axiosBuzz({
method: "POST",
url: "/payments/verify",
data: {
txnId: payload.txnId,
provider: "airpay",
},
});
return response.data;
} catch (err) {
console.log(err);
if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong");
throw err;
}
}
);
export const validateCoupon = createAsyncThunk(
`COUPON:POST/validate`,
async (payload) => {
try {
const response = await axiosBuzzOne({
method: "POST",
url: "/offer/validate-coupon",
data: {
code: payload.couponCode,
},
});
return response.data;
} catch (err) {
console.log(err);
if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong");
throw err;
}
}
);
export const getAllTeenybeansLanguages = createAsyncThunk(
`PURCHASE:getAllTeenybeansLanguages`,
async (paylaod, { rejectWithValue }) => {
try {
const response = await axiosBuzzOne({
method: "GET",
url: "/akademy/bcc/user/languages",
});
return response.data;
} catch (error) {
return rejectWithValue(error.response.data);
}
}
);
export const purchaseSlice = createSlice({
name: "purchase",
initialState: {
currency: localStorage.getItem("currency") || "INR",
planDetails: {},
planPriceDetails: {
RETAIL_PARENT: {},
TUTION_EDUCATOR: {},
ENTERPRISE_SCHOOL: {},
},
classes: [],
purchaseId: localStorage.getItem("PURCHASE_ID"),
purchaseDetails: {},
userDetails:
(localStorage.getItem("USER_DETAILS") &&
JSON.parse(localStorage.getItem("USER_DETAILS"))) ||
{},
statusByName: {},
teenybeansLanguages: [],
},
reducers: {
clearPurchaseCart: (state, action) => {
state.purchaseId = undefined;
localStorage.removeItem("PURCHASE_ID");
state.purchaseDetails = {};
state.userDetails = {};
localStorage.removeItem("USER_DETAILS");
/////////////////////////////////////////////
localStorage.removeItem("IS_USER_VERIFIED");
localStorage.removeItem("IS_EMAIL_OTP_SENT");
},
saveUserDetails: (state, action) => {
state.userDetails = action.payload;
localStorage.setItem("USER_DETAILS", JSON.stringify(action.payload));
},
},
extraReducers: (builder) => {
builder.addCase(getAkademyPlans.pending, (state, action) => {
state.statusByName["plans"] = "pending";
});
builder.addCase(getAkademyPlans.fulfilled, (state, action) => {
state.statusByName["plans"] = "fulfilled";
action.payload.data.map((plan) => {
const { _id, products, productCategory } = plan;
state.planDetails[_id] = plan;
if (products && Array.isArray(products) && products.length == 1) {
state.planPriceDetails[productCategory][products[0]] = plan;
}
});
});
builder.addCase(getAkademyPlans.rejected, (state, action) => {
state.statusByName["plans"] = "rejected";
});
builder.addCase(getAkademyClasses.pending, (state, action) => {
state.statusByName["classes"] = "pending";
});
builder.addCase(getAkademyClasses.fulfilled, (state, action) => {
state.statusByName["classes"] = "fulfilled";
state.classes = ["IK3", "IK2", "IK1", "PG"]?.map((item) =>
action.payload.data?.find((el) => el.name === item)
);
});
builder.addCase(getAkademyClasses.rejected, (state, action) => {
state.statusByName["classes"] = "rejected";
});
builder.addCase(createPurchase.fulfilled, (state, action) => {
const purchaseId = action.payload.data._id;
state.purchaseId = purchaseId;
localStorage.setItem("PURCHASE_ID", purchaseId);
});
builder.addCase(getPurchaseDetails.fulfilled, (state, action) => {
state.purchaseDetails = action.payload.data.data[0];
});
builder.addCase(getAllTeenybeansLanguages.fulfilled, (state, action) => {
state.teenybeansLanguages = action.payload.data;
});
},
});
// Action creators are generated for each case reducer function
export const { saveUserDetails, clearPurchaseCart } = purchaseSlice.actions;
export default purchaseSlice.reducer;