feat: complete Phase 5 of service refactoring

- Marked tasks in `TODO.md` as completed for moving TFS and Jira services to the `integrations` directory and correcting imports across the codebase.
- Updated imports in various action files, API routes, and components to reflect the new structure.
- Removed obsolete `jira-advanced-filters.ts`, `jira-analytics.ts`, `jira-analytics-cache.ts`, `jira-anomaly-detection.ts`, `jira-scheduler.ts`, `jira.ts`, and `tfs.ts` files to streamline the codebase.
- Added new tasks in `TODO.md` for future cleaning and organization of service imports.
This commit is contained in:
Julien Froidefond
2025-09-23 10:32:25 +02:00
parent f5417040fd
commit 88ab8c9334
33 changed files with 46 additions and 44 deletions

24
TODO.md
View File

@@ -137,17 +137,19 @@ src/services/
- [x] Corriger 6 imports externes (pages, API routes, actions)
- [x] Corriger imports relatifs vers ../core/database
### Phase 5: Intégrations (déjà partiellement fait)
- [ ] **Déplacer `tfs.ts`**`integrations/tfs.ts`
- [ ] Corriger imports dans actions/tfs, API routes TFS, components TFS
- [ ] **Déplacer services Jira**`integrations/jira/`
- [ ] `jira.ts``integrations/jira/jira.ts`
- [ ] `jira-scheduler.ts``integrations/jira/scheduler.ts`
- [ ] `jira-analytics.ts``integrations/jira/analytics.ts`
- [ ] `jira-analytics-cache.ts``integrations/jira/analytics-cache.ts`
- [ ] `jira-advanced-filters.ts``integrations/jira/advanced-filters.ts`
- [ ] `jira-anomaly-detection.ts``integrations/jira/anomaly-detection.ts`
- [ ] Corriger tous les imports Jira dans actions, API routes, hooks
### Phase 5: Intégrations
- [x] **Déplacer `tfs.ts`**`integrations/tfs.ts`
- [x] Corriger 10 imports externes (actions, API routes, components, types)
- [x] Corriger imports relatifs vers ../core/
- [x] **Déplacer services Jira**`integrations/jira/`
- [x] `jira.ts``integrations/jira/jira.ts`
- [x] `jira-scheduler.ts``integrations/jira/scheduler.ts`
- [x] `jira-analytics.ts``integrations/jira/analytics.ts`
- [x] `jira-analytics-cache.ts``integrations/jira/analytics-cache.ts`
- [x] `jira-advanced-filters.ts``integrations/jira/advanced-filters.ts`
- [x] `jira-anomaly-detection.ts``integrations/jira/anomaly-detection.ts`
- [x] Corriger 18 imports externes (actions, API routes, hooks, components)
- [x] Corriger imports relatifs entre services Jira
## phase 6: cleaning
- [ ] Les imports des services dans les services : pourquoi ne pas utiliser @/services/... ?

View File

@@ -1,6 +1,6 @@
'use server';
import { JiraAnalyticsService } from '@/services/jira-analytics';
import { JiraAnalyticsService } from '@/services/integrations/jira/analytics';
import { userPreferencesService } from '@/services/core/user-preferences';
import { JiraAnalytics } from '@/lib/types';

View File

@@ -1,7 +1,7 @@
'use server';
import { jiraAnomalyDetection, JiraAnomaly, AnomalyDetectionConfig } from '@/services/jira-anomaly-detection';
import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/jira-analytics';
import { jiraAnomalyDetection, JiraAnomaly, AnomalyDetectionConfig } from '@/services/integrations/jira/anomaly-detection';
import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/integrations/jira/analytics';
import { userPreferencesService } from '@/services/core/user-preferences';
export interface AnomalyDetectionResult {

View File

@@ -1,7 +1,7 @@
'use server';
import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/jira-analytics';
import { JiraAdvancedFiltersService } from '@/services/jira-advanced-filters';
import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/integrations/jira/analytics';
import { JiraAdvancedFiltersService } from '@/services/integrations/jira/advanced-filters';
import { userPreferencesService } from '@/services/core/user-preferences';
import { AvailableFilters, JiraAnalyticsFilters, JiraAnalytics } from '@/lib/types';

View File

@@ -1,6 +1,6 @@
'use server';
import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/jira-analytics';
import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/integrations/jira/analytics';
import { userPreferencesService } from '@/services/core/user-preferences';
import { SprintDetails } from '@/components/jira/SprintDetailModal';
import { JiraTask, AssigneeDistribution, StatusDistribution, SprintVelocity } from '@/lib/types';

View File

@@ -2,7 +2,7 @@
import { userPreferencesService } from '@/services/core/user-preferences';
import { revalidatePath } from 'next/cache';
import { tfsService, TfsConfig } from '@/services/tfs';
import { tfsService, TfsConfig } from '@/services/integrations/tfs';
/**
* Sauvegarde la configuration TFS

View File

@@ -1,7 +1,7 @@
import { NextResponse } from 'next/server';
import { createJiraService, JiraService } from '@/services/jira';
import { createJiraService, JiraService } from '@/services/integrations/jira/jira';
import { userPreferencesService } from '@/services/core/user-preferences';
import { jiraScheduler } from '@/services/jira-scheduler';
import { jiraScheduler } from '@/services/integrations/jira/scheduler';
/**
* Route POST /api/jira/sync

View File

@@ -1,5 +1,5 @@
import { NextRequest, NextResponse } from 'next/server';
import { createJiraService } from '@/services/jira';
import { createJiraService } from '@/services/integrations/jira/jira';
import { userPreferencesService } from '@/services/core/user-preferences';
/**

View File

@@ -1,5 +1,5 @@
import { NextResponse } from 'next/server';
import { tfsService } from '@/services/tfs';
import { tfsService } from '@/services/integrations/tfs';
/**
* Supprime toutes les tâches TFS de la base de données locale

View File

@@ -1,5 +1,5 @@
import { NextResponse } from 'next/server';
import { tfsService } from '@/services/tfs';
import { tfsService } from '@/services/integrations/tfs';
/**
* Route POST /api/tfs/sync

View File

@@ -1,5 +1,5 @@
import { NextResponse } from 'next/server';
import { tfsService } from '@/services/tfs';
import { tfsService } from '@/services/integrations/tfs';
/**
* Route GET /api/tfs/test

View File

@@ -3,7 +3,7 @@
*/
import { HttpClient } from './base/http-client';
import { JiraSyncResult } from '@/services/jira';
import { JiraSyncResult } from '@/services/integrations/jira/jira';
export interface JiraConnectionStatus {
connected: boolean;

View File

@@ -2,7 +2,7 @@
import { Badge } from '@/components/ui/Badge';
import { Task } from '@/lib/types';
import { TfsConfig } from '@/services/tfs';
import { TfsConfig } from '@/services/integrations/tfs';
import { useUserPreferences } from '@/contexts/UserPreferencesContext';
interface TaskTfsInfoProps {

View File

@@ -2,7 +2,7 @@
import { useState, useEffect } from 'react';
import { detectJiraAnomalies, updateAnomalyDetectionConfig, getAnomalyDetectionConfig } from '@/actions/jira-anomalies';
import { JiraAnomaly, AnomalyDetectionConfig } from '@/services/jira-anomaly-detection';
import { JiraAnomaly, AnomalyDetectionConfig } from '@/services/integrations/jira/anomaly-detection';
import { Button } from '@/components/ui/Button';
import { Card, CardHeader, CardContent } from '@/components/ui/Card';
import { AnomalySummary } from './anomaly/AnomalySummary';

View File

@@ -2,7 +2,7 @@
import { useState } from 'react';
import { JiraAnalyticsFilters, AvailableFilters } from '@/lib/types';
import { JiraAdvancedFiltersService } from '@/services/jira-advanced-filters';
import { JiraAdvancedFiltersService } from '@/services/integrations/jira/advanced-filters';
import { Button } from '@/components/ui/Button';
import { Badge } from '@/components/ui/Badge';
import { Modal } from '@/components/ui/Modal';

View File

@@ -7,7 +7,7 @@ import { Badge } from '@/components/ui/Badge';
import { getToday } from '@/lib/date-utils';
import { Modal } from '@/components/ui/Modal';
import { jiraClient } from '@/clients/jira-client';
import { JiraSyncResult, JiraSyncAction } from '@/services/jira';
import { JiraSyncResult, JiraSyncAction } from '@/services/integrations/jira/jira';
interface JiraSyncProps {
onSyncComplete?: () => void;

View File

@@ -2,7 +2,7 @@
import { Modal } from '@/components/ui/Modal';
import { Button } from '@/components/ui/Button';
import { AnomalyDetectionConfig } from '@/services/jira-anomaly-detection';
import { AnomalyDetectionConfig } from '@/services/integrations/jira/anomaly-detection';
interface AnomalyConfigModalProps {
isOpen: boolean;

View File

@@ -1,7 +1,7 @@
'use client';
import { Badge } from '@/components/ui/Badge';
import { JiraAnomaly } from '@/services/jira-anomaly-detection';
import { JiraAnomaly } from '@/services/integrations/jira/anomaly-detection';
interface AnomalyItemProps {
anomaly: JiraAnomaly;

View File

@@ -1,6 +1,6 @@
'use client';
import { JiraAnomaly } from '@/services/jira-anomaly-detection';
import { JiraAnomaly } from '@/services/integrations/jira/anomaly-detection';
import { AnomalyItem } from './AnomalyItem';
interface AnomalyListProps {

View File

@@ -1,7 +1,7 @@
'use client';
import { Badge } from '@/components/ui/Badge';
import { JiraAnomaly } from '@/services/jira-anomaly-detection';
import { JiraAnomaly } from '@/services/integrations/jira/anomaly-detection';
interface AnomalySummaryProps {
anomalies: JiraAnomaly[];

View File

@@ -1,6 +1,6 @@
import { useState, useEffect, useRef, useTransition } from 'react';
import { Task } from '@/lib/types';
import { TfsConfig } from '@/services/tfs';
import { TfsConfig } from '@/services/integrations/tfs';
import { formatDistanceToNow } from 'date-fns';
import { fr } from 'date-fns/locale';
import { Card } from '@/components/ui/Card';

View File

@@ -1,7 +1,7 @@
'use client';
import { JiraConfig } from '@/lib/types';
import { TfsConfig } from '@/services/tfs';
import { TfsConfig } from '@/services/integrations/tfs';
import { Header } from '@/components/ui/Header';
import { Card, CardHeader, CardContent } from '@/components/ui/Card';
import { JiraConfigForm } from '@/components/settings/JiraConfigForm';

View File

@@ -1,7 +1,7 @@
'use client';
import { useState, useEffect, useTransition } from 'react';
import { TfsConfig } from '@/services/tfs';
import { TfsConfig } from '@/services/integrations/tfs';
import { getTfsConfig, saveTfsConfig, deleteAllTfsTasks } from '@/actions/tfs';
import { Button } from '@/components/ui/Button';
import { Badge } from '@/components/ui/Badge';

View File

@@ -1,7 +1,7 @@
import { useState, useEffect, useCallback } from 'react';
import { getAvailableJiraFilters, getFilteredJiraAnalytics } from '@/actions/jira-filters';
import { AvailableFilters, JiraAnalyticsFilters, JiraAnalytics } from '@/lib/types';
import { JiraAdvancedFiltersService } from '@/services/jira-advanced-filters';
import { JiraAdvancedFiltersService } from '@/services/integrations/jira/advanced-filters';
export function useJiraFilters() {
const [availableFilters, setAvailableFilters] = useState<AvailableFilters>({

View File

@@ -1,4 +1,4 @@
import { TfsConfig } from '@/services/tfs';
import { TfsConfig } from '@/services/integrations/tfs';
// Types de base pour les tâches
// Note: TaskStatus et TaskPriority sont maintenant gérés par la configuration centralisée dans lib/status-config.ts

View File

@@ -6,7 +6,7 @@ import {
UserPreferences,
JiraConfig,
} from '@/lib/types';
import { TfsConfig } from '@/services/tfs';
import { TfsConfig } from '@/services/integrations/tfs';
import { prisma } from './database';
import { getConfig } from '@/lib/config';

View File

@@ -4,7 +4,7 @@
*/
import { JiraService } from './jira';
import { jiraAnalyticsCache } from './jira-analytics-cache';
import { jiraAnalyticsCache } from './analytics-cache';
import { getToday, parseDate, subtractDays } from '@/lib/date-utils';
import {
JiraAnalytics,

View File

@@ -4,7 +4,7 @@
*/
import { JiraTask } from '@/lib/types';
import { prisma } from './core/database';
import { prisma } from '../../core/database';
import { parseDate, formatDateForDisplay } from '@/lib/date-utils';
export interface JiraConfig {

View File

@@ -1,4 +1,4 @@
import { userPreferencesService } from './core/user-preferences';
import { userPreferencesService } from '../../core/user-preferences';
import { JiraService } from './jira';
import { addMinutes, getToday } from '@/lib/date-utils';

View File

@@ -5,9 +5,9 @@
*/
import { TfsPullRequest } from '@/lib/types';
import { prisma } from './core/database';
import { prisma } from '../core/database';
import { parseDate, formatDateForDisplay } from '@/lib/date-utils';
import { userPreferencesService } from './core/user-preferences';
import { userPreferencesService } from '../core/user-preferences';
export interface TfsConfig {
enabled: boolean;