340 lines
8.7 KiB
JavaScript
340 lines
8.7 KiB
JavaScript
import ShippingAddressRD from "./RDShippingAddressModel.js";
|
|
export const AddshippingAddress = async (req, res) => {
|
|
// console.log("request came here");
|
|
try {
|
|
const {
|
|
Name,
|
|
phoneNumber,
|
|
street,
|
|
city,
|
|
state,
|
|
postalCode,
|
|
country,
|
|
district,
|
|
} = req.body;
|
|
|
|
// console.log(req.body);
|
|
switch (true) {
|
|
//validation
|
|
case !Name: {
|
|
return res.status(404).json({ msg: "please provide Name" });
|
|
}
|
|
case !phoneNumber: {
|
|
return res.status(404).json({ msg: "please provide phoneNumber" });
|
|
}
|
|
case !street: {
|
|
return res.status(404).json({ msg: "please provide street" });
|
|
}
|
|
case !city: {
|
|
return res.status(404).json({ msg: "please provide city" });
|
|
}
|
|
case !state: {
|
|
return res.status(404).json({ msg: "please provide state" });
|
|
}
|
|
case !postalCode: {
|
|
return res.status(404).json({ msg: "please provide postalCode" });
|
|
}
|
|
case !country: {
|
|
return res.status(404).json({ msg: "please provide country" });
|
|
}
|
|
case !tradeName: {
|
|
return res.status(404).json({ msg: "please provide tradeName" });
|
|
}
|
|
case !district: {
|
|
return res.status(404).json({ msg: "please provide district" });
|
|
}
|
|
}
|
|
req.body.user = req.user._id;
|
|
const address = await ShippingAddressRD.create(req.body);
|
|
|
|
res.status(201).json({
|
|
success: true,
|
|
address,
|
|
message: "shipping Address Added",
|
|
});
|
|
} catch (error) {
|
|
console.log(error.message);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error.message ? error.message : "Something went Wrong",
|
|
});
|
|
}
|
|
};
|
|
export const AddshippingAddressByAdmin = async (req, res) => {
|
|
try {
|
|
const {
|
|
Name,
|
|
phoneNumber,
|
|
street,
|
|
district,
|
|
city,
|
|
state,
|
|
postalCode,
|
|
country,
|
|
tradeName,
|
|
isDefault,
|
|
} = req.body;
|
|
|
|
// Validate required fields
|
|
if (
|
|
!Name ||
|
|
!phoneNumber ||
|
|
!street ||
|
|
!city ||
|
|
!state ||
|
|
!postalCode ||
|
|
!tradeName ||
|
|
!district
|
|
) {
|
|
return res
|
|
.status(400)
|
|
.json({
|
|
msg: "Please provide all required fields: Name, phone number, street, city, state, postal code, district and tradeName",
|
|
});
|
|
}
|
|
|
|
// Create new shipping address
|
|
const newAddress = await ShippingAddressRD.create({
|
|
Name,
|
|
phoneNumber,
|
|
street,
|
|
district,
|
|
city,
|
|
state,
|
|
postalCode,
|
|
country,
|
|
tradeName,
|
|
user: req.params._id,
|
|
isDefault,
|
|
});
|
|
|
|
// If this address is marked as default, set all other addresses for this user to isDefault: false
|
|
if (isDefault) {
|
|
await ShippingAddressRD.updateMany(
|
|
{ user: req.params._id, _id: { $ne: newAddress._id } }, // Exclude the new address
|
|
{ $set: { isDefault: false } }
|
|
);
|
|
}
|
|
|
|
// Respond with success
|
|
res.status(201).json({
|
|
success: true,
|
|
address: newAddress,
|
|
message: "Shipping address added successfully",
|
|
});
|
|
} catch (error) {
|
|
// Check for validation errors
|
|
if (error.name === "ValidationError") {
|
|
const errorMessages = Object.values(error.errors).map(
|
|
(err) => err.message
|
|
);
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: errorMessages.join(", "),
|
|
});
|
|
}
|
|
|
|
// General error response
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error.message || "Something went wrong",
|
|
});
|
|
}
|
|
};
|
|
|
|
// For website
|
|
export const getSingleUserSippingAddress = async (req, res) => {
|
|
try {
|
|
const UserShippingAddress = await ShippingAddressRD.find({
|
|
user: req.user._id,
|
|
}).sort({ createdAt: -1 });
|
|
if (UserShippingAddress) {
|
|
res.status(201).json({
|
|
success: true,
|
|
UserShippingAddress,
|
|
message: "All User Shipping Address Fetched",
|
|
});
|
|
}
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error.message ? error.message : "Something went Wrong",
|
|
});
|
|
}
|
|
};
|
|
// For Admin
|
|
export const getSingleUserSippingAddressForAdmin = async (req, res) => {
|
|
try {
|
|
// console.log(req.params._id);
|
|
const UserShippingAddress = await ShippingAddressRD.find({
|
|
user: req.params._id,
|
|
}).sort({ createdAt: -1 });
|
|
// console.log(UserShippingAddress);
|
|
if (UserShippingAddress) {
|
|
res.status(201).json({
|
|
success: true,
|
|
UserShippingAddress,
|
|
message: "All User Shipping Address Fetched",
|
|
});
|
|
}
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error.message ? error.message : "Something went Wrong",
|
|
});
|
|
}
|
|
};
|
|
|
|
///
|
|
export const deleteSelfShippingAddress = async (req, res) => {
|
|
try {
|
|
if (!req.params.id)
|
|
return res
|
|
.status(400)
|
|
.json({ message: "please Provide shipping Address Id" });
|
|
const getselfAddress = await ShippingAddressRD.findById(req.params.id);
|
|
const userId = req.body.userId ? req.body.userId : req.user._id;
|
|
if (!getselfAddress) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: "No shipping Address Found!",
|
|
});
|
|
}
|
|
if (getselfAddress?.user.toString() === userId.toString()) {
|
|
const address = await ShippingAddressRD.findByIdAndDelete(req.params.id);
|
|
await address.remove();
|
|
return res.status(200).json({
|
|
success: true,
|
|
message: "Shipping Address Deleted Successfully!",
|
|
});
|
|
} else {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: "you can only delete self shipping address!!",
|
|
});
|
|
}
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error.message ? error.message : "Something went Wrong",
|
|
});
|
|
}
|
|
};
|
|
|
|
// update shipping addresss
|
|
export const updateShippingAddress = async (req, res) => {
|
|
try {
|
|
const {
|
|
Name,
|
|
phoneNumber,
|
|
street,
|
|
city,
|
|
district,
|
|
state,
|
|
postalCode,
|
|
country,
|
|
tradeName,
|
|
isDefault,
|
|
} = req.body;
|
|
// console.log(req.body);
|
|
const _id = req.params.id;
|
|
if (!req.params.id)
|
|
return res
|
|
.status(400)
|
|
.json({ message: "please Provide shipping Address Id" });
|
|
const getselfAddress = await ShippingAddressRD.findById(_id);
|
|
if (!getselfAddress) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: "No shipping Address Found!",
|
|
});
|
|
}
|
|
switch (true) {
|
|
//validation
|
|
case !Name: {
|
|
return res.status(404).json({ msg: "please provide Name" });
|
|
}
|
|
case !phoneNumber: {
|
|
return res.status(404).json({ msg: "please provide phone_Number" });
|
|
}
|
|
case !street: {
|
|
return res.status(404).json({ msg: "please provide street" });
|
|
}
|
|
case !city: {
|
|
return res.status(404).json({ msg: "please provide city" });
|
|
}
|
|
case !state: {
|
|
return res.status(404).json({ msg: "please provide state" });
|
|
}
|
|
case !postalCode: {
|
|
return res.status(404).json({ msg: "please provide postalCode" });
|
|
}
|
|
case !country: {
|
|
return res.status(404).json({ msg: "please provide country" });
|
|
}
|
|
case !tradeName: {
|
|
return res.status(404).json({ msg: "please provide tradeName" });
|
|
}
|
|
case !district: {
|
|
return res.status(404).json({ msg: "please provide district" });
|
|
}
|
|
}
|
|
// If the updated address is marked as default, update all other addresses to isDefault: false
|
|
if (isDefault) {
|
|
await ShippingAddressRD.updateMany(
|
|
{ user: getselfAddress.user, _id: { $ne: _id } }, // exclude current address
|
|
{ $set: { isDefault: false } }
|
|
);
|
|
}
|
|
|
|
const updateAddressData = {
|
|
Name,
|
|
phoneNumber,
|
|
street,
|
|
district,
|
|
city,
|
|
state,
|
|
postalCode,
|
|
country,
|
|
tradeName,
|
|
isDefault,
|
|
};
|
|
const updateShippingAddress = await ShippingAddressRD.findByIdAndUpdate(
|
|
{ _id: _id },
|
|
{ $set: updateAddressData },
|
|
{ new: true }
|
|
);
|
|
|
|
res.status(201).json({
|
|
success: true,
|
|
updateShippingAddress,
|
|
message: "Shipping Address updated",
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error.message ? error.message : "Something went Wrong",
|
|
});
|
|
}
|
|
};
|
|
|
|
export const getSingleSippingAddress = async (req, res) => {
|
|
try {
|
|
let _id = req.params.id;
|
|
const address = await ShippingAddressRD.findById({ _id: _id });
|
|
|
|
if (address) {
|
|
res.status(201).json({
|
|
success: true,
|
|
address,
|
|
message: "Shipping Address Fetched",
|
|
});
|
|
}
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error.message ? error.message : "Something went Wrong",
|
|
});
|
|
}
|
|
};
|