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