415 lines
9.9 KiB
JavaScript
415 lines
9.9 KiB
JavaScript
import { AffiliateModel } from "../Affiliate/AffiliateModel.js"; //Note AffiliteModel is binded with coupons
|
|
|
|
//GET ALL Coupons
|
|
export const listAllCoupon = async (req, res) => {
|
|
try {
|
|
const coupon = await AffiliateModel.find(
|
|
{},
|
|
{
|
|
name: 1,
|
|
_id: 1,
|
|
coupon_code: 1,
|
|
discount_amount: 1,
|
|
affiliate_discount_amount: 1,
|
|
is_coupon_active: 1,
|
|
}
|
|
).sort({ createdAt: -1 });
|
|
const filteredCoupons = coupon.filter(
|
|
(data) => !(data.coupon_code == null)
|
|
);
|
|
// console.log(filteredCoupons);
|
|
// console.log(coupon);
|
|
|
|
res.status(200).json({
|
|
success: true,
|
|
message: filteredCoupons,
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error.message ? error.message : "Something went wrong!",
|
|
});
|
|
}
|
|
};
|
|
//CREATE Coupon (AKA Need to update Affiliate )
|
|
export const createCoupon = async (req, res) => {
|
|
//creation of date
|
|
const date = new Date();
|
|
const daysOfWeek = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
|
|
const monthsOfYear = [
|
|
"Jan",
|
|
"Feb",
|
|
"Mar",
|
|
"Apr",
|
|
"May",
|
|
"Jun",
|
|
"Jul",
|
|
"Aug",
|
|
"Sep",
|
|
"Oct",
|
|
"Nov",
|
|
"Dec",
|
|
];
|
|
const dayOfWeek = daysOfWeek[date.getUTCDay()];
|
|
const dateOfMonth = date.getUTCDate();
|
|
const month = monthsOfYear[date.getUTCMonth()];
|
|
const year = date.getUTCFullYear();
|
|
const formattedDate = `${dayOfWeek} ${dateOfMonth}-${month}-${year}`;
|
|
const {
|
|
coupon_code,
|
|
discount_amount,
|
|
valid_till,
|
|
is_coupon_active,
|
|
affiliate_discount_amount,
|
|
} = req.body;
|
|
try {
|
|
const { id } = req.body;
|
|
const update = {
|
|
coupon_code,
|
|
discount_amount,
|
|
valid_till,
|
|
affiliate_discount_amount,
|
|
createdAt: formattedDate,
|
|
is_coupon_active,
|
|
};
|
|
const options = { new: true };
|
|
const saveData = await AffiliateModel.findByIdAndUpdate(
|
|
id,
|
|
update,
|
|
options
|
|
);
|
|
|
|
if (saveData) {
|
|
res.json("done");
|
|
} else {
|
|
res.status(404).json("Affiliate not found");
|
|
}
|
|
} catch (error) {
|
|
res.status(400).json({
|
|
success: true,
|
|
message: "Coupon Already Exists",
|
|
});
|
|
console.log(error);
|
|
}
|
|
};
|
|
|
|
//GET AFFILIATE FOR COUPON LIST
|
|
export const listAffiliateCoupon = async (req, res) => {
|
|
try {
|
|
let resArr = [];
|
|
const coupon = await AffiliateModel.find(
|
|
{},
|
|
{
|
|
name: 1,
|
|
_id: 1,
|
|
is_coupon_active: 1,
|
|
mobile: 1,
|
|
}
|
|
);
|
|
for (let i = 0; i < coupon.length; i++) {
|
|
if (coupon[i].is_coupon_active == false) {
|
|
resArr.push(coupon[i]);
|
|
}
|
|
}
|
|
// console.log(resArr);
|
|
res.status(200).json({
|
|
success: true,
|
|
message: resArr,
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error.message ? error.message : "Something went wrong!",
|
|
});
|
|
}
|
|
};
|
|
//EDIT COUPON
|
|
export const editCoupon = async (req, res) => {
|
|
const {
|
|
coupon_code,
|
|
discount_amount,
|
|
valid_till,
|
|
affiliate_discount_amount,
|
|
} = req.body;
|
|
|
|
const updateFields = {};
|
|
|
|
// Add only the fields that are present in the request body to the updateFields object
|
|
if (coupon_code) updateFields.coupon_code = coupon_code;
|
|
if (discount_amount) updateFields.discount_amount = discount_amount;
|
|
if (valid_till) updateFields.valid_till = valid_till;
|
|
if (affiliate_discount_amount)
|
|
updateFields.affiliate_discount_amount = affiliate_discount_amount;
|
|
|
|
try {
|
|
const saveData = await AffiliateModel.findByIdAndUpdate(
|
|
{ _id: req.params.id },
|
|
{ $set: updateFields },
|
|
{ new: true }
|
|
);
|
|
res.json({
|
|
success: true,
|
|
message: "Coupon Edited Succesfully",
|
|
});
|
|
} catch (error) {
|
|
res.status(400).json({
|
|
success: false,
|
|
message: error.message
|
|
? error.message
|
|
.split(":")
|
|
.splice(1)
|
|
.join(":")
|
|
.trim()
|
|
.split(":")
|
|
.splice(1)
|
|
.join(":")
|
|
.trim()
|
|
: "Error in Editing Coupon",
|
|
});
|
|
}
|
|
};
|
|
//SUSPEND COUPON
|
|
export const suspendCoupon = async (req, res) => {
|
|
const { id, is_coupon_active } = req.body;
|
|
try {
|
|
const saveData = await AffiliateModel.findByIdAndUpdate(id, {
|
|
is_coupon_active: is_coupon_active,
|
|
});
|
|
res.status(200).json({
|
|
success: true,
|
|
message: "Success",
|
|
});
|
|
} catch (error) {
|
|
res.status(400).json({
|
|
success: false,
|
|
message: "Coupon Doesn't Exists",
|
|
});
|
|
}
|
|
};
|
|
|
|
//GET ONE COUPON
|
|
export const getOneCoupon = async (req, res) => {
|
|
if (req.params?.id) {
|
|
try {
|
|
const saveData = await AffiliateModel.findById(req.params.id);
|
|
|
|
const resObj = {
|
|
name: saveData.name,
|
|
mobile: saveData.mobile,
|
|
coupon_code: saveData.coupon_code,
|
|
discount_amount: saveData.discount_amount,
|
|
valid_till: saveData.valid_till,
|
|
affiliate_discount_amount: saveData.affiliate_discount_amount,
|
|
};
|
|
res.status(200).json({
|
|
success: true,
|
|
message: resObj,
|
|
});
|
|
} catch (error) {
|
|
res.status(400).json({
|
|
success: false,
|
|
message: "Error in getting Coupons",
|
|
});
|
|
}
|
|
}
|
|
};
|
|
|
|
//Validate Coupon-----------------------
|
|
export const validateCoupon = async (req, res) => {
|
|
const { coupon } = req.params;
|
|
|
|
if (!coupon) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: "Coupon code is required",
|
|
});
|
|
}
|
|
|
|
try {
|
|
// Find the coupon data in the database
|
|
const couponData = await AffiliateModel.findOne({ coupon_code: coupon });
|
|
|
|
if (!couponData) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: "Coupon not found",
|
|
});
|
|
}
|
|
|
|
const { valid_till, discount_amount, is_coupon_active } = couponData;
|
|
//Check whether Coupon is Active or not
|
|
if (!is_coupon_active) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: "Coupon Code Expired",
|
|
});
|
|
}
|
|
// Check if the coupon is expired
|
|
const currentDate = new Date();
|
|
const expirationDate = new Date(valid_till);
|
|
|
|
if (currentDate > expirationDate) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: "Coupon has expired",
|
|
});
|
|
}
|
|
|
|
// If coupon is valid, return success response
|
|
res.status(200).json({
|
|
success: true,
|
|
message: "Coupon is valid",
|
|
discount_amount: discount_amount,
|
|
});
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: "Internal server error",
|
|
});
|
|
}
|
|
};
|
|
|
|
//PAY & HISTORY---------------------
|
|
export const usedCoupon = async (req, res) => {
|
|
// Retrieve orderId and coupon_code from request body or query parameters
|
|
const { orderId, coupon_code, userId } = req.body;
|
|
if (!orderId || !coupon_code || !userId) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: "Error in getting OrderId or Coupon",
|
|
});
|
|
}
|
|
|
|
// Validating Coupon
|
|
try {
|
|
const couponData = await AffiliateModel.findOne({
|
|
coupon_code: coupon_code,
|
|
});
|
|
//order exists or not
|
|
|
|
if (!couponData) {
|
|
// Check if the coupon exists
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: "Coupon not found",
|
|
});
|
|
}
|
|
// Check if orderId is unique
|
|
try {
|
|
const isOrderIdUnique = await AffiliateModel.find(
|
|
{},
|
|
{
|
|
coupon_used_history: 1,
|
|
}
|
|
);
|
|
|
|
let orderIdFound = false;
|
|
|
|
isOrderIdUnique.forEach((data) => {
|
|
data.coupon_used_history.forEach((subItem) => {
|
|
if (subItem.orderId == orderId) {
|
|
orderIdFound = true;
|
|
}
|
|
});
|
|
});
|
|
|
|
if (orderIdFound) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: "Error: OrderId already used",
|
|
});
|
|
}
|
|
} catch (error) {
|
|
console.error(error);
|
|
return res.status(500).json({
|
|
success: false,
|
|
message: "Internal server error",
|
|
});
|
|
}
|
|
//If not unique then create
|
|
const {
|
|
valid_till,
|
|
is_coupon_active,
|
|
is_affiliate_active,
|
|
affiliate_discount_amount,
|
|
_id,
|
|
} = couponData;
|
|
// console.log(couponData);
|
|
if (!is_coupon_active || !is_affiliate_active) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: "Coupon Code Expired",
|
|
});
|
|
}
|
|
const currentDate = new Date();
|
|
const expirationDate = new Date(valid_till);
|
|
|
|
if (currentDate > expirationDate) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: "Coupon has expired",
|
|
});
|
|
}
|
|
|
|
AffiliateModel.findByIdAndUpdate(
|
|
_id,
|
|
{
|
|
$inc: { total_earning: affiliate_discount_amount, coupon_claimed: 1 },
|
|
$push: {
|
|
coupon_used_history: {
|
|
orderId: orderId,
|
|
userId: userId,
|
|
date: currentDate,
|
|
couponCode: coupon_code,
|
|
},
|
|
},
|
|
},
|
|
{ new: true }
|
|
)
|
|
.then(() => {
|
|
res.status(200).json({
|
|
success: true,
|
|
message: "Coupon add success",
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
console.error(error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: "Internal server error",
|
|
});
|
|
});
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: "Internal server error",
|
|
});
|
|
}
|
|
};
|
|
//Get Coupon data for History
|
|
export const couponPayHistory = async (req, res) => {
|
|
if (req.params?.id) {
|
|
try {
|
|
const saveData = await AffiliateModel.findById(req.params.id).sort({
|
|
updatedAt: -1,
|
|
});
|
|
// console.log(saveData.coupon_used_history);
|
|
const resObj = {
|
|
coupon_used_history: saveData.coupon_used_history,
|
|
coupon_code: saveData.coupon_code,
|
|
};
|
|
res.status(200).json({
|
|
success: true,
|
|
message: resObj,
|
|
});
|
|
} catch (error) {
|
|
res.status(400).json({
|
|
success: false,
|
|
message: "Error in getting History",
|
|
});
|
|
}
|
|
}
|
|
};
|