feat: Implement Phase 2 cross-cutting services with email and notification enhancements

- Refactor email verification and password reset utilities to use new email service.
- Introduce email delivery queue and notification delivery model for better tracking.
- Enhance file validation and storage services for improved security and ownership management.
- Add cron job for cleaning inactive notifications with retention policy.
- Update document worker to handle document generation and storage more efficiently.
- Implement logging improvements in activity and log workers.
- Create comprehensive documentation for new API endpoints and services.
- Add unit tests for file validation and notification policies to ensure robustness.
This commit is contained in:
Sathira Sri Sathara
2026-09-03 14:22:34 +05:30
parent 9d3d431416
commit b6b345f245
54 changed files with 593 additions and 1248 deletions
+2 -1
View File
@@ -15,6 +15,7 @@ const connection = require("../config/redisClient");
const activityQueue = new Queue("activity-queue", {
connection,
defaultJobOptions: { attempts: 3, backoff: { type: "exponential", delay: 1000 }, removeOnComplete: { age: 86400, count: 5000 }, removeOnFail: { age: 604800, count: 5000 } },
});
module.exports = activityQueue;
module.exports = activityQueue;
+1 -1
View File
@@ -27,7 +27,7 @@ const documentQueue = new Queue("document-generation", {
count: 1000,
},
removeOnFail: false,
removeOnFail: { age: 604800, count: 5000 },
},
});
+3
View File
@@ -0,0 +1,3 @@
const { Queue } = require("bullmq");
const connection = require("../config/redisClient");
module.exports = new Queue("email-delivery", { connection, defaultJobOptions: { attempts: 5, backoff: { type: "exponential", delay: 2000 }, removeOnComplete: { age: 3600, count: 1000 }, removeOnFail: { age: 604800, count: 5000 } } });
+2 -2
View File
@@ -12,6 +12,6 @@
const { Queue } = require("bullmq");
const connection = require("../config/redisClient");
const logQueue = new Queue("logQueue", { connection });
const logQueue = new Queue("logQueue", { connection, defaultJobOptions: { attempts: 2, backoff: { type: "fixed", delay: 1000 }, removeOnComplete: { age: 3600, count: 5000 }, removeOnFail: { age: 86400, count: 5000 } } });
module.exports = logQueue;
module.exports = logQueue;