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(

View File

@@ -26,7 +26,7 @@ export async function GET() {
export async function PUT(request: NextRequest) {
try {
const body = await request.json();
const { baseUrl, email, apiToken } = body;
const { baseUrl, email, apiToken, ignoredProjects } = body;
// Validation des données requises
if (!baseUrl || !email || !apiToken) {
@@ -59,7 +59,10 @@ export async function PUT(request: NextRequest) {
baseUrl: baseUrl.trim(),
email: email.trim(),
apiToken: apiToken.trim(),
enabled: true
enabled: true,
ignoredProjects: Array.isArray(ignoredProjects)
? ignoredProjects.map((p: string) => p.trim().toUpperCase()).filter((p: string) => p.length > 0)
: []
};
await userPreferencesService.saveJiraConfig(jiraConfig);
@@ -91,7 +94,8 @@ export async function DELETE() {
baseUrl: '',
email: '',
apiToken: '',
enabled: false
enabled: false,
ignoredProjects: []
};
await userPreferencesService.saveJiraConfig(defaultConfig);