feat: implement project ignore list for Jira synchronization

- Updated `JiraConfigForm` to include an input for ignored projects, allowing users to specify projects to exclude from synchronization.
- Enhanced `JiraService` with a method to filter out tasks from ignored projects, improving task management.
- Modified user preferences to store ignored projects, ensuring persistence across sessions.
- Updated API routes to handle ignored projects in configuration, enhancing overall functionality.
- Marked the corresponding task as complete in TODO.md.
This commit is contained in:
Julien Froidefond
2025-09-18 13:29:15 +02:00
parent 3ce7af043c
commit a98bde86d3
7 changed files with 131 additions and 15 deletions

View File

@@ -1,5 +1,6 @@
import { NextResponse } from 'next/server';
import { createJiraService } from '@/services/jira';
import { createJiraService, JiraService } from '@/services/jira';
import { userPreferencesService } from '@/services/user-preferences';
/**
* Route POST /api/jira/sync
@@ -7,11 +8,27 @@ import { createJiraService } from '@/services/jira';
*/
export async function POST() {
try {
const jiraService = createJiraService();
// Essayer d'abord la config depuis la base de données
const jiraConfig = await userPreferencesService.getJiraConfig();
let jiraService: JiraService | null = null;
if (jiraConfig.enabled && jiraConfig.baseUrl && jiraConfig.email && jiraConfig.apiToken) {
// Utiliser la config depuis la base de données
jiraService = new JiraService({
baseUrl: jiraConfig.baseUrl,
email: jiraConfig.email,
apiToken: jiraConfig.apiToken,
ignoredProjects: jiraConfig.ignoredProjects || []
});
} else {
// Fallback sur les variables d'environnement
jiraService = createJiraService();
}
if (!jiraService) {
return NextResponse.json(
{ error: 'Configuration Jira manquante. Vérifiez les variables d\'environnement JIRA_BASE_URL, JIRA_EMAIL et JIRA_API_TOKEN.' },
{ error: 'Configuration Jira manquante. Configurez Jira dans les paramètres ou vérifiez les variables d\'environnement.' },
{ status: 400 }
);
}
@@ -64,7 +81,23 @@ export async function POST() {
*/
export async function GET() {
try {
const jiraService = createJiraService();
// Essayer d'abord la config depuis la base de données
const jiraConfig = await userPreferencesService.getJiraConfig();
let jiraService: JiraService | null = null;
if (jiraConfig.enabled && jiraConfig.baseUrl && jiraConfig.email && jiraConfig.apiToken) {
// Utiliser la config depuis la base de données
jiraService = new JiraService({
baseUrl: jiraConfig.baseUrl,
email: jiraConfig.email,
apiToken: jiraConfig.apiToken,
ignoredProjects: jiraConfig.ignoredProjects || []
});
} else {
// Fallback sur les variables d'environnement
jiraService = createJiraService();
}
if (!jiraService) {
return NextResponse.json(