fix cleanup
This commit is contained in:
parent
96e4571b44
commit
9ca61e74ec
@ -4,8 +4,9 @@ const { authenticateToken, requireAdmin } = require('../middleware/auth');
|
|||||||
const Domain = require('../db/models/Domain');
|
const Domain = require('../db/models/Domain');
|
||||||
const User = require('../db/models/User');
|
const User = require('../db/models/User');
|
||||||
const TempEmail = require('../db/models/TempEmail');
|
const TempEmail = require('../db/models/TempEmail');
|
||||||
|
const Message = require('../db/models/Message');
|
||||||
const MessageService = require('../email_server/services/MessageService');
|
const MessageService = require('../email_server/services/MessageService');
|
||||||
|
const config = require('../config/haraka');
|
||||||
router.use(authenticateToken, requireAdmin);
|
router.use(authenticateToken, requireAdmin);
|
||||||
|
|
||||||
// Domain management
|
// Domain management
|
||||||
@ -91,14 +92,48 @@ router.delete('/temp-emails/:id', async (req, res) => {
|
|||||||
res.status(500).json({ error: error.message });
|
res.status(500).json({ error: error.message });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
const { transaction } = require('objection');
|
||||||
|
|
||||||
// Manual cleanup trigger
|
|
||||||
router.post('/cleanup', async (req, res) => {
|
router.post('/cleanup', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const deletedCount = await MessageService.cleanup();
|
const cutoffDate = new Date();
|
||||||
res.json({ deletedCount });
|
cutoffDate.setDate(cutoffDate.getDate() - 14); // Using 14 days directly from your specification
|
||||||
|
|
||||||
|
// Start a transaction to ensure data consistency
|
||||||
|
const result = await transaction(TempEmail.knex(), async (trx) => {
|
||||||
|
// First get the IDs of emails to be deleted
|
||||||
|
const emailsToDelete = await TempEmail.query(trx)
|
||||||
|
.select('id')
|
||||||
|
.where('created_at', '<', cutoffDate);
|
||||||
|
|
||||||
|
const emailIds = emailsToDelete.map(email => email.id);
|
||||||
|
|
||||||
|
// Delete associated messages first (foreign key constraint)
|
||||||
|
const deletedMessages = emailIds.length > 0
|
||||||
|
? await Message.query(trx)
|
||||||
|
.whereIn('temp_email_id', emailIds)
|
||||||
|
.where('created_at', '<', cutoffDate)
|
||||||
|
.delete()
|
||||||
|
: 0;
|
||||||
|
|
||||||
|
// Then delete the temporary emails
|
||||||
|
const deletedTempEmails = await TempEmail.query(trx)
|
||||||
|
.where('created_at', '<', cutoffDate)
|
||||||
|
.delete();
|
||||||
|
|
||||||
|
return {
|
||||||
|
deletedMessages,
|
||||||
|
deletedTempEmails
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
res.json(result);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
res.status(500).json({ error: error.message });
|
console.error('Cleanup error:', error);
|
||||||
|
res.status(500).json({
|
||||||
|
error: 'Failed to perform cleanup',
|
||||||
|
details: error.message
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user