mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-22 22:58:15 +02:00
fix: Relocate controller to services to resolve backend path issues
This commit is contained in:
1 parent
bb3f3013cc
commit
11d4c213f6
3 files changed
+8
-8
No files matched your search
@@ -1,4 +1,4 @@
|
||||
const recurringTodosController = require('../controllers/recurringTodosController');
|
||||
const recurringTodosService = require('./recurring-todos.service');
|
||||
const logger = require('../config/logger');
|
||||
|
||||
function startScheduler() {
|
||||
@@ -8,7 +8,7 @@ function startScheduler() {
|
||||
setInterval(async () => {
|
||||
try {
|
||||
logger.debug('Vérification périodique des tâches récurrentes...');
|
||||
const result = await recurringTodosController.generateTodos(); // All users
|
||||
const result = await recurringTodosService.generateTodos(); // All users
|
||||
if (result.generated > 0) {
|
||||
logger.info(`Tâches récurrentes auto-générées: ${result.generated}`);
|
||||
}
|
||||
@@ -20,7 +20,7 @@ function startScheduler() {
|
||||
// Allow start check after a slight delay to ensure DB is ready
|
||||
setTimeout(async () => {
|
||||
try {
|
||||
const result = await recurringTodosController.generateTodos();
|
||||
const result = await recurringTodosService.generateTodos();
|
||||
if (result.generated > 0) {
|
||||
logger.info(`Tâches récurrentes auto-générées (démarrage): ${result.generated}`);
|
||||
} else {
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
const { getAll, runQuery } = require('../config/database');
|
||||
const logger = require('../config/logger');
|
||||
|
||||
class RecurringTodosService {
|
||||
/**
|
||||
* Génère les tâches à partir des modèles récurrents.
|
||||
* @param {number|null} userId - ID de l'utilisateur pour filtrer (optionnel). Si null, traite tous les utilisateurs.
|
||||
* @returns {Promise<{generated: number}>} Nombre de tâches générées
|
||||
*/
|
||||
async generateTodos(userId = null) {
|
||||
try {
|
||||
const today = new Date().toISOString().split('T')[0];
|
||||
let recurringTodos;
|
||||
|
||||
if (userId) {
|
||||
recurringTodos = await getAll(
|
||||
`SELECT * FROM recurring_todos
|
||||
WHERE enabled = true AND next_occurrence <= $1 AND user_id = $2`,
|
||||
[today, userId]
|
||||
);
|
||||
} else {
|
||||
recurringTodos = await getAll(
|
||||
`SELECT * FROM recurring_todos
|
||||
WHERE enabled = true AND next_occurrence <= $1`,
|
||||
[today]
|
||||
);
|
||||
}
|
||||
|
||||
let generatedCount = 0;
|
||||
|
||||
for (const recurring of recurringTodos) {
|
||||
// Créer le todo global
|
||||
await runQuery(
|
||||
`INSERT INTO global_todos (user_id, text, priority, completed)
|
||||
VALUES ($1, $2, $3, false)`,
|
||||
[recurring.user_id, recurring.text, recurring.priority]
|
||||
);
|
||||
|
||||
// Calculer la prochaine occurrence
|
||||
let nextDate = new Date(recurring.next_occurrence);
|
||||
|
||||
switch (recurring.recurrence_type) {
|
||||
case 'daily':
|
||||
nextDate.setDate(nextDate.getDate() + recurring.recurrence_interval);
|
||||
break;
|
||||
case 'weekly':
|
||||
nextDate.setDate(nextDate.getDate() + (7 * recurring.recurrence_interval));
|
||||
break;
|
||||
case 'biweekly':
|
||||
nextDate.setDate(nextDate.getDate() + 14);
|
||||
break;
|
||||
case 'monthly':
|
||||
nextDate.setMonth(nextDate.getMonth() + recurring.recurrence_interval);
|
||||
break;
|
||||
case 'yearly':
|
||||
nextDate.setFullYear(nextDate.getFullYear() + recurring.recurrence_interval);
|
||||
break;
|
||||
}
|
||||
|
||||
// Mettre à jour la tâche récurrente
|
||||
await runQuery(
|
||||
`UPDATE recurring_todos SET next_occurrence = $1, last_generated = $2 WHERE id = $3`,
|
||||
[nextDate.toISOString().split('T')[0], today, recurring.id]
|
||||
);
|
||||
|
||||
generatedCount++;
|
||||
}
|
||||
|
||||
return { generated: generatedCount };
|
||||
} catch (error) {
|
||||
logger.error('Erreur dans RecurringTodosService.generateTodos:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new RecurringTodosService();
|
||||
Reference in new issue
Block a user