email sent when personal information changed
This commit is contained in:
@@ -3,6 +3,7 @@ const { User, UserAddress } = require('../models'); // Import from models/index.
|
||||
const { authenticateToken } = require('../middleware/auth');
|
||||
const { uploadProfileImage } = require('../middleware/upload');
|
||||
const logger = require('../utils/logger');
|
||||
const userService = require('../services/UserService');
|
||||
const fs = require('fs').promises;
|
||||
const path = require('path');
|
||||
const router = express.Router();
|
||||
@@ -57,15 +58,7 @@ router.get('/addresses', authenticateToken, async (req, res) => {
|
||||
|
||||
router.post('/addresses', authenticateToken, async (req, res) => {
|
||||
try {
|
||||
const address = await UserAddress.create({
|
||||
...req.body,
|
||||
userId: req.user.id
|
||||
});
|
||||
const reqLogger = logger.withRequestId(req.id);
|
||||
reqLogger.info("User address created", {
|
||||
userId: req.user.id,
|
||||
addressId: address.id
|
||||
});
|
||||
const address = await userService.createUserAddress(req.user.id, req.body);
|
||||
|
||||
res.status(201).json(address);
|
||||
} catch (error) {
|
||||
@@ -82,23 +75,7 @@ router.post('/addresses', authenticateToken, async (req, res) => {
|
||||
|
||||
router.put('/addresses/:id', authenticateToken, async (req, res) => {
|
||||
try {
|
||||
const address = await UserAddress.findByPk(req.params.id);
|
||||
|
||||
if (!address) {
|
||||
return res.status(404).json({ error: 'Address not found' });
|
||||
}
|
||||
|
||||
if (address.userId !== req.user.id) {
|
||||
return res.status(403).json({ error: 'Unauthorized' });
|
||||
}
|
||||
|
||||
await address.update(req.body);
|
||||
|
||||
const reqLogger = logger.withRequestId(req.id);
|
||||
reqLogger.info("User address updated", {
|
||||
userId: req.user.id,
|
||||
addressId: req.params.id
|
||||
});
|
||||
const address = await userService.updateUserAddress(req.user.id, req.params.id, req.body);
|
||||
|
||||
res.json(address);
|
||||
} catch (error) {
|
||||
@@ -109,29 +86,18 @@ router.put('/addresses/:id', authenticateToken, async (req, res) => {
|
||||
userId: req.user.id,
|
||||
addressId: req.params.id
|
||||
});
|
||||
|
||||
if (error.message === 'Address not found') {
|
||||
return res.status(404).json({ error: error.message });
|
||||
}
|
||||
|
||||
res.status(500).json({ error: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
router.delete('/addresses/:id', authenticateToken, async (req, res) => {
|
||||
try {
|
||||
const address = await UserAddress.findByPk(req.params.id);
|
||||
|
||||
if (!address) {
|
||||
return res.status(404).json({ error: 'Address not found' });
|
||||
}
|
||||
|
||||
if (address.userId !== req.user.id) {
|
||||
return res.status(403).json({ error: 'Unauthorized' });
|
||||
}
|
||||
|
||||
await address.destroy();
|
||||
|
||||
const reqLogger = logger.withRequestId(req.id);
|
||||
reqLogger.info("User address deleted", {
|
||||
userId: req.user.id,
|
||||
addressId: req.params.id
|
||||
});
|
||||
await userService.deleteUserAddress(req.user.id, req.params.id);
|
||||
|
||||
res.status(204).send();
|
||||
} catch (error) {
|
||||
@@ -142,6 +108,11 @@ router.delete('/addresses/:id', authenticateToken, async (req, res) => {
|
||||
userId: req.user.id,
|
||||
addressId: req.params.id
|
||||
});
|
||||
|
||||
if (error.message === 'Address not found') {
|
||||
return res.status(404).json({ error: error.message });
|
||||
}
|
||||
|
||||
res.status(500).json({ error: error.message });
|
||||
}
|
||||
});
|
||||
@@ -211,49 +182,13 @@ router.get('/:id', async (req, res) => {
|
||||
|
||||
router.put('/profile', authenticateToken, async (req, res) => {
|
||||
try {
|
||||
const {
|
||||
firstName,
|
||||
lastName,
|
||||
email,
|
||||
phone,
|
||||
address1,
|
||||
address2,
|
||||
city,
|
||||
state,
|
||||
zipCode,
|
||||
country,
|
||||
itemRequestNotificationRadius
|
||||
} = req.body;
|
||||
|
||||
// Build update object, excluding empty email
|
||||
const updateData = {
|
||||
firstName,
|
||||
lastName,
|
||||
phone,
|
||||
address1,
|
||||
address2,
|
||||
city,
|
||||
state,
|
||||
zipCode,
|
||||
country,
|
||||
itemRequestNotificationRadius
|
||||
};
|
||||
|
||||
// Only include email if it's not empty
|
||||
if (email && email.trim() !== '') {
|
||||
updateData.email = email;
|
||||
}
|
||||
|
||||
await req.user.update(updateData);
|
||||
|
||||
const updatedUser = await User.findByPk(req.user.id, {
|
||||
attributes: { exclude: ['password'] }
|
||||
});
|
||||
// Use UserService to handle update and email notification
|
||||
const updatedUser = await userService.updateProfile(req.user.id, req.body);
|
||||
|
||||
res.json(updatedUser);
|
||||
} catch (error) {
|
||||
console.error('Profile update error:', error);
|
||||
res.status(500).json({
|
||||
res.status(500).json({
|
||||
error: error.message,
|
||||
details: error.errors ? error.errors.map(e => ({ field: e.path, message: e.message })) : undefined
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user