feat: implement Jira auto-sync scheduler and UI configuration

- Added `jiraAutoSync` and `jiraSyncInterval` fields to user preferences for scheduler configuration.
- Created `JiraScheduler` service to manage automatic synchronization with Jira based on user settings.
- Updated API route to handle scheduler actions and configuration updates.
- Introduced `JiraSchedulerConfig` component for user interface to control scheduler settings.
- Enhanced `TODO.md` to reflect completed tasks related to Jira synchronization features.
This commit is contained in:
Julien Froidefond
2025-09-21 11:30:41 +02:00
parent a0e2a78372
commit 799a21df5c
9 changed files with 581 additions and 10 deletions

View File

@@ -1,14 +1,55 @@
import { NextResponse } from 'next/server';
import { createJiraService, JiraService } from '@/services/jira';
import { userPreferencesService } from '@/services/user-preferences';
import { jiraScheduler } from '@/services/jira-scheduler';
/**
* Route POST /api/jira/sync
* Synchronise les tickets Jira avec la base locale
* Supporte aussi les actions du scheduler
*/
export async function POST() {
export async function POST(request: Request) {
try {
// Essayer d'abord la config depuis la base de données
// Vérifier s'il y a des actions spécifiques (scheduler)
const body = await request.json().catch(() => ({}));
const { action, ...params } = body;
// Actions du scheduler
if (action) {
switch (action) {
case 'scheduler':
if (params.enabled) {
await jiraScheduler.start();
} else {
jiraScheduler.stop();
}
return NextResponse.json({
success: true,
data: await jiraScheduler.getStatus()
});
case 'config':
await userPreferencesService.saveJiraSchedulerConfig(
params.jiraAutoSync,
params.jiraSyncInterval
);
// Redémarrer le scheduler si la config a changé
await jiraScheduler.restart();
return NextResponse.json({
success: true,
message: 'Configuration scheduler mise à jour',
data: await jiraScheduler.getStatus()
});
default:
return NextResponse.json(
{ success: false, error: 'Action inconnue' },
{ status: 400 }
);
}
}
// Synchronisation normale (manuelle)
const jiraConfig = await userPreferencesService.getJiraConfig();
let jiraService: JiraService | null = null;
@@ -34,7 +75,7 @@ export async function POST() {
);
}
console.log('🔄 Début de la synchronisation Jira...');
console.log('🔄 Début de la synchronisation Jira manuelle...');
// Tester la connexion d'abord
const connectionOk = await jiraService.testConnection();
@@ -118,6 +159,9 @@ export async function GET() {
projectValidation = await jiraService.validateProject(jiraConfig.projectKey);
}
// Récupérer aussi le statut du scheduler
const schedulerStatus = await jiraScheduler.getStatus();
return NextResponse.json({
connected,
message: connected ? 'Connexion Jira OK' : 'Impossible de se connecter à Jira',
@@ -126,7 +170,8 @@ export async function GET() {
exists: projectValidation.exists,
name: projectValidation.name,
error: projectValidation.error
} : null
} : null,
scheduler: schedulerStatus
});
} catch (error) {