samoulla-backend / controllers /addressController.js
Samoulla Sync Bot
Auto-deploy Samoulla Backend: b68e45770de26ed39feb4b1c0925e5345eb3a61d
634b9bb
const User = require('../models/userModel');
//address functions
exports.addAddress = async (req, res) => {
try {
const user = await User.findByIdAndUpdate(
req.user.id,
{ $push: { addresses: req.body } },
{ new: true },
);
// Get the newly added address (last item in array)
const newAddress = user.addresses[user.addresses.length - 1];
res.status(201).json({
status: 'success',
message: 'Address added successfully',
address: newAddress,
});
} catch (err) {
res.status(500).json({ status: 'error', error: err.message });
}
};
exports.getAddresses = async (req, res) => {
try {
const user = await User.findById(req.user.id).select('addresses').lean();
res.json({
status: 'success',
addresses: user.addresses || [],
});
} catch (err) {
res.status(500).json({ status: 'error', error: err.message });
}
};
exports.updateAddress = async (req, res) => {
try {
const user = await User.findOneAndUpdate(
{ _id: req.user.id, 'addresses._id': req.params.id },
{ $set: { 'addresses.$': { ...req.body, _id: req.params.id } } },
{ new: true },
);
if (!user) {
return res.status(404).json({
status: 'error',
message: 'Address not found',
});
}
const updatedAddress = user.addresses.find(
(addr) => addr._id.toString() === req.params.id,
);
res.json({
status: 'success',
message: 'Address updated successfully',
address: updatedAddress,
});
} catch (err) {
res.status(500).json({ status: 'error', error: err.message });
}
};
exports.deleteAddress = async (req, res) => {
try {
const user = await User.findByIdAndUpdate(
req.user.id,
{ $pull: { addresses: { _id: req.params.id } } },
{ new: true },
);
if (!user) {
return res.status(404).json({
status: 'error',
message: 'User not found',
});
}
res.json({
status: 'success',
message: 'Address deleted successfully',
});
} catch (err) {
res.status(500).json({ status: 'error', error: err.message });
}
};