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:
24
TODO.md
24
TODO.md
@@ -137,17 +137,19 @@ src/services/
|
|||||||
- [x] Corriger 6 imports externes (pages, API routes, actions)
|
- [x] Corriger 6 imports externes (pages, API routes, actions)
|
||||||
- [x] Corriger imports relatifs vers ../core/database
|
- [x] Corriger imports relatifs vers ../core/database
|
||||||
|
|
||||||
### Phase 5: Intégrations (déjà partiellement fait)
|
### Phase 5: Intégrations ✅
|
||||||
- [ ] **Déplacer `tfs.ts`** → `integrations/tfs.ts`
|
- [x] **Déplacer `tfs.ts`** → `integrations/tfs.ts`
|
||||||
- [ ] Corriger imports dans actions/tfs, API routes TFS, components TFS
|
- [x] Corriger 10 imports externes (actions, API routes, components, types)
|
||||||
- [ ] **Déplacer services Jira** → `integrations/jira/`
|
- [x] Corriger imports relatifs vers ../core/
|
||||||
- [ ] `jira.ts` → `integrations/jira/jira.ts`
|
- [x] **Déplacer services Jira** → `integrations/jira/`
|
||||||
- [ ] `jira-scheduler.ts` → `integrations/jira/scheduler.ts`
|
- [x] `jira.ts` → `integrations/jira/jira.ts`
|
||||||
- [ ] `jira-analytics.ts` → `integrations/jira/analytics.ts`
|
- [x] `jira-scheduler.ts` → `integrations/jira/scheduler.ts`
|
||||||
- [ ] `jira-analytics-cache.ts` → `integrations/jira/analytics-cache.ts`
|
- [x] `jira-analytics.ts` → `integrations/jira/analytics.ts`
|
||||||
- [ ] `jira-advanced-filters.ts` → `integrations/jira/advanced-filters.ts`
|
- [x] `jira-analytics-cache.ts` → `integrations/jira/analytics-cache.ts`
|
||||||
- [ ] `jira-anomaly-detection.ts` → `integrations/jira/anomaly-detection.ts`
|
- [x] `jira-advanced-filters.ts` → `integrations/jira/advanced-filters.ts`
|
||||||
- [ ] Corriger tous les imports Jira dans actions, API routes, hooks
|
- [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
|
## phase 6: cleaning
|
||||||
- [ ] Les imports des services dans les services : pourquoi ne pas utiliser @/services/... ?
|
- [ ] Les imports des services dans les services : pourquoi ne pas utiliser @/services/... ?
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
'use server';
|
'use server';
|
||||||
|
|
||||||
import { JiraAnalyticsService } from '@/services/jira-analytics';
|
import { JiraAnalyticsService } from '@/services/integrations/jira/analytics';
|
||||||
import { userPreferencesService } from '@/services/core/user-preferences';
|
import { userPreferencesService } from '@/services/core/user-preferences';
|
||||||
import { JiraAnalytics } from '@/lib/types';
|
import { JiraAnalytics } from '@/lib/types';
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
'use server';
|
'use server';
|
||||||
|
|
||||||
import { jiraAnomalyDetection, JiraAnomaly, AnomalyDetectionConfig } from '@/services/jira-anomaly-detection';
|
import { jiraAnomalyDetection, JiraAnomaly, AnomalyDetectionConfig } from '@/services/integrations/jira/anomaly-detection';
|
||||||
import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/jira-analytics';
|
import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/integrations/jira/analytics';
|
||||||
import { userPreferencesService } from '@/services/core/user-preferences';
|
import { userPreferencesService } from '@/services/core/user-preferences';
|
||||||
|
|
||||||
export interface AnomalyDetectionResult {
|
export interface AnomalyDetectionResult {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
'use server';
|
'use server';
|
||||||
|
|
||||||
import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/jira-analytics';
|
import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/integrations/jira/analytics';
|
||||||
import { JiraAdvancedFiltersService } from '@/services/jira-advanced-filters';
|
import { JiraAdvancedFiltersService } from '@/services/integrations/jira/advanced-filters';
|
||||||
import { userPreferencesService } from '@/services/core/user-preferences';
|
import { userPreferencesService } from '@/services/core/user-preferences';
|
||||||
import { AvailableFilters, JiraAnalyticsFilters, JiraAnalytics } from '@/lib/types';
|
import { AvailableFilters, JiraAnalyticsFilters, JiraAnalytics } from '@/lib/types';
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
'use server';
|
'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 { userPreferencesService } from '@/services/core/user-preferences';
|
||||||
import { SprintDetails } from '@/components/jira/SprintDetailModal';
|
import { SprintDetails } from '@/components/jira/SprintDetailModal';
|
||||||
import { JiraTask, AssigneeDistribution, StatusDistribution, SprintVelocity } from '@/lib/types';
|
import { JiraTask, AssigneeDistribution, StatusDistribution, SprintVelocity } from '@/lib/types';
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { userPreferencesService } from '@/services/core/user-preferences';
|
import { userPreferencesService } from '@/services/core/user-preferences';
|
||||||
import { revalidatePath } from 'next/cache';
|
import { revalidatePath } from 'next/cache';
|
||||||
import { tfsService, TfsConfig } from '@/services/tfs';
|
import { tfsService, TfsConfig } from '@/services/integrations/tfs';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sauvegarde la configuration TFS
|
* Sauvegarde la configuration TFS
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { NextResponse } from 'next/server';
|
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 { userPreferencesService } from '@/services/core/user-preferences';
|
||||||
import { jiraScheduler } from '@/services/jira-scheduler';
|
import { jiraScheduler } from '@/services/integrations/jira/scheduler';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Route POST /api/jira/sync
|
* Route POST /api/jira/sync
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server';
|
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';
|
import { userPreferencesService } from '@/services/core/user-preferences';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { NextResponse } from 'next/server';
|
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
|
* Supprime toutes les tâches TFS de la base de données locale
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { NextResponse } from 'next/server';
|
import { NextResponse } from 'next/server';
|
||||||
import { tfsService } from '@/services/tfs';
|
import { tfsService } from '@/services/integrations/tfs';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Route POST /api/tfs/sync
|
* Route POST /api/tfs/sync
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { NextResponse } from 'next/server';
|
import { NextResponse } from 'next/server';
|
||||||
import { tfsService } from '@/services/tfs';
|
import { tfsService } from '@/services/integrations/tfs';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Route GET /api/tfs/test
|
* Route GET /api/tfs/test
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { HttpClient } from './base/http-client';
|
import { HttpClient } from './base/http-client';
|
||||||
import { JiraSyncResult } from '@/services/jira';
|
import { JiraSyncResult } from '@/services/integrations/jira/jira';
|
||||||
|
|
||||||
export interface JiraConnectionStatus {
|
export interface JiraConnectionStatus {
|
||||||
connected: boolean;
|
connected: boolean;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { Badge } from '@/components/ui/Badge';
|
import { Badge } from '@/components/ui/Badge';
|
||||||
import { Task } from '@/lib/types';
|
import { Task } from '@/lib/types';
|
||||||
import { TfsConfig } from '@/services/tfs';
|
import { TfsConfig } from '@/services/integrations/tfs';
|
||||||
import { useUserPreferences } from '@/contexts/UserPreferencesContext';
|
import { useUserPreferences } from '@/contexts/UserPreferencesContext';
|
||||||
|
|
||||||
interface TaskTfsInfoProps {
|
interface TaskTfsInfoProps {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { useState, useEffect } from 'react';
|
import { useState, useEffect } from 'react';
|
||||||
import { detectJiraAnomalies, updateAnomalyDetectionConfig, getAnomalyDetectionConfig } from '@/actions/jira-anomalies';
|
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 { Button } from '@/components/ui/Button';
|
||||||
import { Card, CardHeader, CardContent } from '@/components/ui/Card';
|
import { Card, CardHeader, CardContent } from '@/components/ui/Card';
|
||||||
import { AnomalySummary } from './anomaly/AnomalySummary';
|
import { AnomalySummary } from './anomaly/AnomalySummary';
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { JiraAnalyticsFilters, AvailableFilters } from '@/lib/types';
|
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 { Button } from '@/components/ui/Button';
|
||||||
import { Badge } from '@/components/ui/Badge';
|
import { Badge } from '@/components/ui/Badge';
|
||||||
import { Modal } from '@/components/ui/Modal';
|
import { Modal } from '@/components/ui/Modal';
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { Badge } from '@/components/ui/Badge';
|
|||||||
import { getToday } from '@/lib/date-utils';
|
import { getToday } from '@/lib/date-utils';
|
||||||
import { Modal } from '@/components/ui/Modal';
|
import { Modal } from '@/components/ui/Modal';
|
||||||
import { jiraClient } from '@/clients/jira-client';
|
import { jiraClient } from '@/clients/jira-client';
|
||||||
import { JiraSyncResult, JiraSyncAction } from '@/services/jira';
|
import { JiraSyncResult, JiraSyncAction } from '@/services/integrations/jira/jira';
|
||||||
|
|
||||||
interface JiraSyncProps {
|
interface JiraSyncProps {
|
||||||
onSyncComplete?: () => void;
|
onSyncComplete?: () => void;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { Modal } from '@/components/ui/Modal';
|
import { Modal } from '@/components/ui/Modal';
|
||||||
import { Button } from '@/components/ui/Button';
|
import { Button } from '@/components/ui/Button';
|
||||||
import { AnomalyDetectionConfig } from '@/services/jira-anomaly-detection';
|
import { AnomalyDetectionConfig } from '@/services/integrations/jira/anomaly-detection';
|
||||||
|
|
||||||
interface AnomalyConfigModalProps {
|
interface AnomalyConfigModalProps {
|
||||||
isOpen: boolean;
|
isOpen: boolean;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { Badge } from '@/components/ui/Badge';
|
import { Badge } from '@/components/ui/Badge';
|
||||||
import { JiraAnomaly } from '@/services/jira-anomaly-detection';
|
import { JiraAnomaly } from '@/services/integrations/jira/anomaly-detection';
|
||||||
|
|
||||||
interface AnomalyItemProps {
|
interface AnomalyItemProps {
|
||||||
anomaly: JiraAnomaly;
|
anomaly: JiraAnomaly;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { JiraAnomaly } from '@/services/jira-anomaly-detection';
|
import { JiraAnomaly } from '@/services/integrations/jira/anomaly-detection';
|
||||||
import { AnomalyItem } from './AnomalyItem';
|
import { AnomalyItem } from './AnomalyItem';
|
||||||
|
|
||||||
interface AnomalyListProps {
|
interface AnomalyListProps {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { Badge } from '@/components/ui/Badge';
|
import { Badge } from '@/components/ui/Badge';
|
||||||
import { JiraAnomaly } from '@/services/jira-anomaly-detection';
|
import { JiraAnomaly } from '@/services/integrations/jira/anomaly-detection';
|
||||||
|
|
||||||
interface AnomalySummaryProps {
|
interface AnomalySummaryProps {
|
||||||
anomalies: JiraAnomaly[];
|
anomalies: JiraAnomaly[];
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { useState, useEffect, useRef, useTransition } from 'react';
|
import { useState, useEffect, useRef, useTransition } from 'react';
|
||||||
import { Task } from '@/lib/types';
|
import { Task } from '@/lib/types';
|
||||||
import { TfsConfig } from '@/services/tfs';
|
import { TfsConfig } from '@/services/integrations/tfs';
|
||||||
import { formatDistanceToNow } from 'date-fns';
|
import { formatDistanceToNow } from 'date-fns';
|
||||||
import { fr } from 'date-fns/locale';
|
import { fr } from 'date-fns/locale';
|
||||||
import { Card } from '@/components/ui/Card';
|
import { Card } from '@/components/ui/Card';
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { JiraConfig } from '@/lib/types';
|
import { JiraConfig } from '@/lib/types';
|
||||||
import { TfsConfig } from '@/services/tfs';
|
import { TfsConfig } from '@/services/integrations/tfs';
|
||||||
import { Header } from '@/components/ui/Header';
|
import { Header } from '@/components/ui/Header';
|
||||||
import { Card, CardHeader, CardContent } from '@/components/ui/Card';
|
import { Card, CardHeader, CardContent } from '@/components/ui/Card';
|
||||||
import { JiraConfigForm } from '@/components/settings/JiraConfigForm';
|
import { JiraConfigForm } from '@/components/settings/JiraConfigForm';
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { useState, useEffect, useTransition } from 'react';
|
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 { getTfsConfig, saveTfsConfig, deleteAllTfsTasks } from '@/actions/tfs';
|
||||||
import { Button } from '@/components/ui/Button';
|
import { Button } from '@/components/ui/Button';
|
||||||
import { Badge } from '@/components/ui/Badge';
|
import { Badge } from '@/components/ui/Badge';
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { useState, useEffect, useCallback } from 'react';
|
import { useState, useEffect, useCallback } from 'react';
|
||||||
import { getAvailableJiraFilters, getFilteredJiraAnalytics } from '@/actions/jira-filters';
|
import { getAvailableJiraFilters, getFilteredJiraAnalytics } from '@/actions/jira-filters';
|
||||||
import { AvailableFilters, JiraAnalyticsFilters, JiraAnalytics } from '@/lib/types';
|
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() {
|
export function useJiraFilters() {
|
||||||
const [availableFilters, setAvailableFilters] = useState<AvailableFilters>({
|
const [availableFilters, setAvailableFilters] = useState<AvailableFilters>({
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { TfsConfig } from '@/services/tfs';
|
import { TfsConfig } from '@/services/integrations/tfs';
|
||||||
|
|
||||||
// Types de base pour les tâches
|
// 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
|
// Note: TaskStatus et TaskPriority sont maintenant gérés par la configuration centralisée dans lib/status-config.ts
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
UserPreferences,
|
UserPreferences,
|
||||||
JiraConfig,
|
JiraConfig,
|
||||||
} from '@/lib/types';
|
} from '@/lib/types';
|
||||||
import { TfsConfig } from '@/services/tfs';
|
import { TfsConfig } from '@/services/integrations/tfs';
|
||||||
import { prisma } from './database';
|
import { prisma } from './database';
|
||||||
import { getConfig } from '@/lib/config';
|
import { getConfig } from '@/lib/config';
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { JiraService } from './jira';
|
import { JiraService } from './jira';
|
||||||
import { jiraAnalyticsCache } from './jira-analytics-cache';
|
import { jiraAnalyticsCache } from './analytics-cache';
|
||||||
import { getToday, parseDate, subtractDays } from '@/lib/date-utils';
|
import { getToday, parseDate, subtractDays } from '@/lib/date-utils';
|
||||||
import {
|
import {
|
||||||
JiraAnalytics,
|
JiraAnalytics,
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { JiraTask } from '@/lib/types';
|
import { JiraTask } from '@/lib/types';
|
||||||
import { prisma } from './core/database';
|
import { prisma } from '../../core/database';
|
||||||
import { parseDate, formatDateForDisplay } from '@/lib/date-utils';
|
import { parseDate, formatDateForDisplay } from '@/lib/date-utils';
|
||||||
|
|
||||||
export interface JiraConfig {
|
export interface JiraConfig {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { userPreferencesService } from './core/user-preferences';
|
import { userPreferencesService } from '../../core/user-preferences';
|
||||||
import { JiraService } from './jira';
|
import { JiraService } from './jira';
|
||||||
import { addMinutes, getToday } from '@/lib/date-utils';
|
import { addMinutes, getToday } from '@/lib/date-utils';
|
||||||
|
|
||||||
@@ -5,9 +5,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { TfsPullRequest } from '@/lib/types';
|
import { TfsPullRequest } from '@/lib/types';
|
||||||
import { prisma } from './core/database';
|
import { prisma } from '../core/database';
|
||||||
import { parseDate, formatDateForDisplay } from '@/lib/date-utils';
|
import { parseDate, formatDateForDisplay } from '@/lib/date-utils';
|
||||||
import { userPreferencesService } from './core/user-preferences';
|
import { userPreferencesService } from '../core/user-preferences';
|
||||||
|
|
||||||
export interface TfsConfig {
|
export interface TfsConfig {
|
||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
Reference in New Issue
Block a user