fix cleanup

This commit is contained in:
Ryahn 2025-01-27 20:51:41 -05:00
parent 96e4571b44
commit 9ca61e74ec

View File

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