api/resources/ShippingAddressesRD/RDShippingAddressController.js

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",
});
}
};