diff --git a/TODO.md b/TODO.md index 3677ae2..587317f 100644 --- a/TODO.md +++ b/TODO.md @@ -86,6 +86,71 @@ - [ ] Configuration unifiée des filtres et synchronisations - [ ] Dashboard multi-intégrations +## 🔄 Refactoring Services par Domaine + +### Organisation cible des services: +``` +src/services/ +├── core/ # Services fondamentaux +├── analytics/ # Analytics et métriques +├── data-management/# Backup, système, base +├── integrations/ # Services externes +├── task-management/# Gestion des tâches +``` + +### Phase 1: Services Core (infrastructure) ✅ +- [x] **Déplacer `database.ts`** → `core/database.ts` + - [x] Corriger tous les imports internes des services + - [x] Corriger import dans scripts/reset-database.ts +- [x] **Déplacer `system-info.ts`** → `core/system-info.ts` + - [x] Corriger imports dans actions/system + - [x] Corriger import dynamique de backup +- [x] **Déplacer `user-preferences.ts`** → `core/user-preferences.ts` + - [x] Corriger 13 imports externes (actions, API routes, pages) + - [x] Corriger 3 imports internes entre services + +### Phase 2: Analytics & Métriques +- [ ] **Déplacer `analytics.ts`** → `analytics/analytics.ts` + - [ ] Corriger imports dans hooks/components analytics +- [ ] **Déplacer `metrics.ts`** → `analytics/metrics.ts` + - [ ] Corriger import dans `actions/metrics.ts` +- [ ] **Déplacer `manager-summary.ts`** → `analytics/manager-summary.ts` + - [ ] Corriger imports dans components dashboard + +### Phase 3: Data Management +- [ ] **Déplacer `backup.ts`** → `data-management/backup.ts` + - [ ] Corriger imports dans backup-scheduler et actions +- [ ] **Déplacer `backup-scheduler.ts`** → `data-management/backup-scheduler.ts` + - [ ] Corriger imports dans API routes + +### Phase 4: Task Management +- [ ] **Déplacer `tasks.ts`** → `task-management/tasks.ts` + - [ ] Corriger imports dans actions/tasks, hooks/useTasks +- [ ] **Déplacer `tags.ts`** → `task-management/tags.ts` + - [ ] Corriger import dans `actions/tags.ts` +- [ ] **Déplacer `daily.ts`** → `task-management/daily.ts` + - [ ] Corriger imports dans hooks/useDaily, actions/daily + +### 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 + +### Points d'attention pour chaque service: +1. **Identifier tous les imports du service** (grep) +2. **Déplacer le fichier** vers le nouveau dossier +3. **Corriger les imports externes** (actions, API, hooks, components) +4. **Corriger les imports internes** entre services +5. **Tester** que l'app fonctionne toujours +6. **Commit** le déplacement d'un service à la fois + ``` ### 👥 Gestion multi-utilisateurs (PROJET MAJEUR) diff --git a/scripts/reset-database.ts b/scripts/reset-database.ts index eb8be2e..7a4499c 100644 --- a/scripts/reset-database.ts +++ b/scripts/reset-database.ts @@ -1,4 +1,4 @@ -import { prisma } from '../src/services/database'; +import { prisma } from '../src/services/core/database'; /** * Script pour reset la base de données et supprimer les anciennes données diff --git a/src/actions/jira-analytics.ts b/src/actions/jira-analytics.ts index ef309ea..2d405f5 100644 --- a/src/actions/jira-analytics.ts +++ b/src/actions/jira-analytics.ts @@ -1,7 +1,7 @@ 'use server'; import { JiraAnalyticsService } from '@/services/jira-analytics'; -import { userPreferencesService } from '@/services/user-preferences'; +import { userPreferencesService } from '@/services/core/user-preferences'; import { JiraAnalytics } from '@/lib/types'; export type JiraAnalyticsResult = { diff --git a/src/actions/jira-anomalies.ts b/src/actions/jira-anomalies.ts index 531946a..2f3e056 100644 --- a/src/actions/jira-anomalies.ts +++ b/src/actions/jira-anomalies.ts @@ -2,7 +2,7 @@ import { jiraAnomalyDetection, JiraAnomaly, AnomalyDetectionConfig } from '@/services/jira-anomaly-detection'; import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/jira-analytics'; -import { userPreferencesService } from '@/services/user-preferences'; +import { userPreferencesService } from '@/services/core/user-preferences'; export interface AnomalyDetectionResult { success: boolean; diff --git a/src/actions/jira-filters.ts b/src/actions/jira-filters.ts index 0c63cc6..14df915 100644 --- a/src/actions/jira-filters.ts +++ b/src/actions/jira-filters.ts @@ -2,7 +2,7 @@ import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/jira-analytics'; import { JiraAdvancedFiltersService } from '@/services/jira-advanced-filters'; -import { userPreferencesService } from '@/services/user-preferences'; +import { userPreferencesService } from '@/services/core/user-preferences'; import { AvailableFilters, JiraAnalyticsFilters, JiraAnalytics } from '@/lib/types'; export interface FiltersResult { diff --git a/src/actions/jira-sprint-details.ts b/src/actions/jira-sprint-details.ts index 3d57e3c..1871bd1 100644 --- a/src/actions/jira-sprint-details.ts +++ b/src/actions/jira-sprint-details.ts @@ -1,7 +1,7 @@ 'use server'; import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/jira-analytics'; -import { userPreferencesService } from '@/services/user-preferences'; +import { userPreferencesService } from '@/services/core/user-preferences'; import { SprintDetails } from '@/components/jira/SprintDetailModal'; import { JiraTask, AssigneeDistribution, StatusDistribution, SprintVelocity } from '@/lib/types'; import { parseDate } from '@/lib/date-utils'; diff --git a/src/actions/preferences.ts b/src/actions/preferences.ts index 8d4bef2..ca74994 100644 --- a/src/actions/preferences.ts +++ b/src/actions/preferences.ts @@ -1,6 +1,6 @@ 'use server'; -import { userPreferencesService } from '@/services/user-preferences'; +import { userPreferencesService } from '@/services/core/user-preferences'; import { KanbanFilters, ViewPreferences, ColumnVisibility, TaskStatus } from '@/lib/types'; import { revalidatePath } from 'next/cache'; diff --git a/src/actions/system-info.ts b/src/actions/system-info.ts index 54c9204..88006da 100644 --- a/src/actions/system-info.ts +++ b/src/actions/system-info.ts @@ -1,6 +1,6 @@ 'use server'; -import { SystemInfoService } from '@/services/system-info'; +import { SystemInfoService } from '@/services/core/system-info'; export async function getSystemInfo() { try { diff --git a/src/actions/tfs.ts b/src/actions/tfs.ts index bcd0d7a..3ead50f 100644 --- a/src/actions/tfs.ts +++ b/src/actions/tfs.ts @@ -1,6 +1,6 @@ 'use server'; -import { userPreferencesService } from '@/services/user-preferences'; +import { userPreferencesService } from '@/services/core/user-preferences'; import { revalidatePath } from 'next/cache'; import { tfsService, TfsConfig } from '@/services/tfs'; diff --git a/src/app/api/jira/logs/route.ts b/src/app/api/jira/logs/route.ts index a1edb8a..b951c4f 100644 --- a/src/app/api/jira/logs/route.ts +++ b/src/app/api/jira/logs/route.ts @@ -1,5 +1,5 @@ import { NextRequest, NextResponse } from 'next/server'; -import { prisma } from '@/services/database'; +import { prisma } from '@/services/core/database'; /** * Route GET /api/jira/logs diff --git a/src/app/api/jira/sync/route.ts b/src/app/api/jira/sync/route.ts index 16776d2..23dee01 100644 --- a/src/app/api/jira/sync/route.ts +++ b/src/app/api/jira/sync/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from 'next/server'; import { createJiraService, JiraService } from '@/services/jira'; -import { userPreferencesService } from '@/services/user-preferences'; +import { userPreferencesService } from '@/services/core/user-preferences'; import { jiraScheduler } from '@/services/jira-scheduler'; /** diff --git a/src/app/api/jira/validate-project/route.ts b/src/app/api/jira/validate-project/route.ts index 1b76886..0c1092a 100644 --- a/src/app/api/jira/validate-project/route.ts +++ b/src/app/api/jira/validate-project/route.ts @@ -1,6 +1,6 @@ import { NextRequest, NextResponse } from 'next/server'; import { createJiraService } from '@/services/jira'; -import { userPreferencesService } from '@/services/user-preferences'; +import { userPreferencesService } from '@/services/core/user-preferences'; /** * POST /api/jira/validate-project diff --git a/src/app/api/user-preferences/jira-config/route.ts b/src/app/api/user-preferences/jira-config/route.ts index 764674d..3d5bac7 100644 --- a/src/app/api/user-preferences/jira-config/route.ts +++ b/src/app/api/user-preferences/jira-config/route.ts @@ -1,5 +1,5 @@ import { NextRequest, NextResponse } from 'next/server'; -import { userPreferencesService } from '@/services/user-preferences'; +import { userPreferencesService } from '@/services/core/user-preferences'; import { JiraConfig } from '@/lib/types'; /** diff --git a/src/app/api/user-preferences/route.ts b/src/app/api/user-preferences/route.ts index 4f3e366..d805fe5 100644 --- a/src/app/api/user-preferences/route.ts +++ b/src/app/api/user-preferences/route.ts @@ -1,5 +1,5 @@ import { NextRequest, NextResponse } from 'next/server'; -import { userPreferencesService } from '@/services/user-preferences'; +import { userPreferencesService } from '@/services/core/user-preferences'; /** * GET /api/user-preferences - Récupère toutes les préférences utilisateur diff --git a/src/app/jira-dashboard/page.tsx b/src/app/jira-dashboard/page.tsx index 1fe5bd1..d4e661e 100644 --- a/src/app/jira-dashboard/page.tsx +++ b/src/app/jira-dashboard/page.tsx @@ -1,4 +1,4 @@ -import { userPreferencesService } from '@/services/user-preferences'; +import { userPreferencesService } from '@/services/core/user-preferences'; import { JiraDashboardPageClient } from './JiraDashboardPageClient'; // Force dynamic rendering diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 3d9e37b..414a212 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -4,7 +4,7 @@ import "./globals.css"; import { ThemeProvider } from "@/contexts/ThemeContext"; import { JiraConfigProvider } from "@/contexts/JiraConfigContext"; import { UserPreferencesProvider } from "@/contexts/UserPreferencesContext"; -import { userPreferencesService } from "@/services/user-preferences"; +import { userPreferencesService } from "@/services/core/user-preferences"; const geistSans = Geist({ variable: "--font-geist-sans", diff --git a/src/app/settings/integrations/page.tsx b/src/app/settings/integrations/page.tsx index bae65a8..da63ddb 100644 --- a/src/app/settings/integrations/page.tsx +++ b/src/app/settings/integrations/page.tsx @@ -1,4 +1,4 @@ -import { userPreferencesService } from '@/services/user-preferences'; +import { userPreferencesService } from '@/services/core/user-preferences'; import { IntegrationsSettingsPageClient } from '@/components/settings/IntegrationsSettingsPageClient'; // Force dynamic rendering for real-time data diff --git a/src/app/settings/page.tsx b/src/app/settings/page.tsx index c8e52cb..da4d9c7 100644 --- a/src/app/settings/page.tsx +++ b/src/app/settings/page.tsx @@ -1,4 +1,4 @@ -import { SystemInfoService } from '@/services/system-info'; +import { SystemInfoService } from '@/services/core/system-info'; import { SettingsIndexPageClient } from '@/components/settings/SettingsIndexPageClient'; // Force dynamic rendering (no static generation) diff --git a/src/components/settings/SettingsIndexPageClient.tsx b/src/components/settings/SettingsIndexPageClient.tsx index da6174a..e085718 100644 --- a/src/components/settings/SettingsIndexPageClient.tsx +++ b/src/components/settings/SettingsIndexPageClient.tsx @@ -6,7 +6,7 @@ import { useState, useEffect, useTransition } from 'react'; import { backupClient } from '@/clients/backup-client'; import { jiraClient } from '@/clients/jira-client'; import { getSystemInfo } from '@/actions/system-info'; -import { SystemInfo } from '@/services/system-info'; +import { SystemInfo } from '@/services/core/system-info'; import { QuickStats } from './index/QuickStats'; import { SettingsNavigation } from './index/SettingsNavigation'; import { QuickActions } from './index/QuickActions'; diff --git a/src/components/settings/index/QuickStats.tsx b/src/components/settings/index/QuickStats.tsx index 5385c14..5733fa1 100644 --- a/src/components/settings/index/QuickStats.tsx +++ b/src/components/settings/index/QuickStats.tsx @@ -2,7 +2,7 @@ import { Card, CardContent } from '@/components/ui/Card'; import { UserPreferences } from '@/lib/types'; -import { SystemInfo } from '@/services/system-info'; +import { SystemInfo } from '@/services/core/system-info'; interface QuickStatsProps { preferences: UserPreferences; diff --git a/src/components/settings/index/SystemInfo.tsx b/src/components/settings/index/SystemInfo.tsx index 83c7d34..80980aa 100644 --- a/src/components/settings/index/SystemInfo.tsx +++ b/src/components/settings/index/SystemInfo.tsx @@ -1,7 +1,7 @@ 'use client'; import { Card, CardHeader, CardContent } from '@/components/ui/Card'; -import { SystemInfo as SystemInfoType } from '@/services/system-info'; +import { SystemInfo as SystemInfoType } from '@/services/core/system-info'; interface SystemInfoProps { systemInfo: SystemInfoType | null; diff --git a/src/services/analytics.ts b/src/services/analytics.ts index 5e39f10..4ff5e7a 100644 --- a/src/services/analytics.ts +++ b/src/services/analytics.ts @@ -1,5 +1,5 @@ import { Task, TaskStatus, TaskPriority, TaskSource } from '@/lib/types'; -import { prisma } from './database'; +import { prisma } from './core/database'; import { getToday, parseDate, subtractDays } from '@/lib/date-utils'; export interface ProductivityMetrics { diff --git a/src/services/backup.ts b/src/services/backup.ts index 6433d29..bc6775c 100644 --- a/src/services/backup.ts +++ b/src/services/backup.ts @@ -1,7 +1,7 @@ import { promises as fs } from 'fs'; import path from 'path'; -import { prisma } from './database'; -import { userPreferencesService } from './user-preferences'; +import { prisma } from './core/database'; +import { userPreferencesService } from './core/user-preferences'; import { BackupUtils } from '../lib/backup-utils'; import { getToday } from '@/lib/date-utils'; diff --git a/src/services/database.ts b/src/services/core/database.ts similarity index 100% rename from src/services/database.ts rename to src/services/core/database.ts diff --git a/src/services/system-info.ts b/src/services/core/system-info.ts similarity index 99% rename from src/services/system-info.ts rename to src/services/core/system-info.ts index 4f43fce..5b0db6b 100644 --- a/src/services/system-info.ts +++ b/src/services/core/system-info.ts @@ -125,7 +125,7 @@ export class SystemInfoService { private static async getBackupCount(): Promise { try { // Import dynamique pour éviter les dépendances circulaires - const { backupService } = await import('./backup'); + const { backupService } = await import('../backup'); const backups = await backupService.listBackups(); return backups.length; } catch (error) { diff --git a/src/services/user-preferences.ts b/src/services/core/user-preferences.ts similarity index 100% rename from src/services/user-preferences.ts rename to src/services/core/user-preferences.ts diff --git a/src/services/daily.ts b/src/services/daily.ts index aadd337..48e0aa8 100644 --- a/src/services/daily.ts +++ b/src/services/daily.ts @@ -1,4 +1,4 @@ -import { prisma } from './database'; +import { prisma } from './core/database'; import { Prisma } from '@prisma/client'; import { DailyCheckbox, DailyView, CreateDailyCheckboxData, UpdateDailyCheckboxData, BusinessError, DailyCheckboxType, TaskStatus, TaskPriority, TaskSource } from '@/lib/types'; import { getPreviousWorkday, normalizeDate, formatDateForAPI, getToday, getYesterday } from '@/lib/date-utils'; diff --git a/src/services/jira-scheduler.ts b/src/services/jira-scheduler.ts index 08d20b7..767c5ee 100644 --- a/src/services/jira-scheduler.ts +++ b/src/services/jira-scheduler.ts @@ -1,4 +1,4 @@ -import { userPreferencesService } from './user-preferences'; +import { userPreferencesService } from './core/user-preferences'; import { JiraService } from './jira'; import { addMinutes, getToday } from '@/lib/date-utils'; diff --git a/src/services/jira.ts b/src/services/jira.ts index 58cc4c0..7246375 100644 --- a/src/services/jira.ts +++ b/src/services/jira.ts @@ -4,7 +4,7 @@ */ import { JiraTask } from '@/lib/types'; -import { prisma } from './database'; +import { prisma } from './core/database'; import { parseDate, formatDateForDisplay } from '@/lib/date-utils'; export interface JiraConfig { diff --git a/src/services/manager-summary.ts b/src/services/manager-summary.ts index 1a7676c..aee776c 100644 --- a/src/services/manager-summary.ts +++ b/src/services/manager-summary.ts @@ -1,4 +1,4 @@ -import { prisma } from './database'; +import { prisma } from './core/database'; import { startOfWeek, endOfWeek } from 'date-fns'; import { getToday } from '@/lib/date-utils'; diff --git a/src/services/metrics.ts b/src/services/metrics.ts index 2423756..702aea5 100644 --- a/src/services/metrics.ts +++ b/src/services/metrics.ts @@ -1,4 +1,4 @@ -import { prisma } from './database'; +import { prisma } from './core/database'; import { startOfWeek, endOfWeek, eachDayOfInterval, format, startOfDay, endOfDay } from 'date-fns'; import { fr } from 'date-fns/locale'; import { formatDateForAPI, getDayName, getToday, subtractDays } from '@/lib/date-utils'; diff --git a/src/services/tags.ts b/src/services/tags.ts index 7bbcdd4..a732a33 100644 --- a/src/services/tags.ts +++ b/src/services/tags.ts @@ -1,4 +1,4 @@ -import { prisma } from './database'; +import { prisma } from './core/database'; import { Prisma } from '@prisma/client'; import { Tag } from '@/lib/types'; diff --git a/src/services/tasks.ts b/src/services/tasks.ts index a01ae05..20a32d9 100644 --- a/src/services/tasks.ts +++ b/src/services/tasks.ts @@ -1,4 +1,4 @@ -import { prisma } from './database'; +import { prisma } from './core/database'; import { Task, TaskStatus, TaskPriority, TaskSource, BusinessError, DailyCheckbox, DailyCheckboxType } from '@/lib/types'; import { Prisma } from '@prisma/client'; import { getToday } from '@/lib/date-utils'; diff --git a/src/services/tfs.ts b/src/services/tfs.ts index 975e83a..3afe7ef 100644 --- a/src/services/tfs.ts +++ b/src/services/tfs.ts @@ -5,9 +5,9 @@ */ import { TfsPullRequest } from '@/lib/types'; -import { prisma } from './database'; +import { prisma } from './core/database'; import { parseDate, formatDateForDisplay } from '@/lib/date-utils'; -import { userPreferencesService } from './user-preferences'; +import { userPreferencesService } from './core/user-preferences'; export interface TfsConfig { enabled: boolean;