feat: refactor service organization and update imports

- Introduced a new structure for services in `src/services/` to improve organization by domain, including core, analytics, data management, integrations, and task management.
- Moved relevant files to their new locations and updated all internal and external imports accordingly.
- Updated `TODO.md` to reflect the new service organization and outlined phases for further refactoring.
This commit is contained in:
Julien Froidefond
2025-09-23 10:10:34 +02:00
parent ee64fe2ff3
commit f88954bf81
34 changed files with 98 additions and 33 deletions

View File

@@ -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 = {

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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';

View File

@@ -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';

View File

@@ -1,6 +1,6 @@
'use server';
import { SystemInfoService } from '@/services/system-info';
import { SystemInfoService } from '@/services/core/system-info';
export async function getSystemInfo() {
try {

View File

@@ -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';

View File

@@ -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

View File

@@ -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';
/**

View File

@@ -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

View File

@@ -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';
/**

View File

@@ -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

View File

@@ -1,4 +1,4 @@
import { userPreferencesService } from '@/services/user-preferences';
import { userPreferencesService } from '@/services/core/user-preferences';
import { JiraDashboardPageClient } from './JiraDashboardPageClient';
// Force dynamic rendering

View File

@@ -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",

View File

@@ -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

View File

@@ -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)

View File

@@ -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';

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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';

View File

@@ -125,7 +125,7 @@ export class SystemInfoService {
private static async getBackupCount(): Promise<number> {
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) {

View File

@@ -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';

View File

@@ -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';

View File

@@ -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 {

View File

@@ -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';

View File

@@ -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';

View File

@@ -1,4 +1,4 @@
import { prisma } from './database';
import { prisma } from './core/database';
import { Prisma } from '@prisma/client';
import { Tag } from '@/lib/types';

View File

@@ -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';

View File

@@ -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;