Compare commits
7 Commits
feat/tfsSy
...
refacto/se
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f9c92f9efd | ||
|
|
bbb4e543c4 | ||
|
|
88ab8c9334 | ||
|
|
f5417040fd | ||
|
|
b8e0307f03 | ||
|
|
ed16e2bb80 | ||
|
|
f88954bf81 |
105
TODO.md
105
TODO.md
@@ -86,6 +86,111 @@
|
||||
- [ ] 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 ✅
|
||||
- [x] **Déplacer `analytics.ts`** → `analytics/analytics.ts`
|
||||
- [x] Corriger 2 imports externes (actions, components)
|
||||
- [x] **Déplacer `metrics.ts`** → `analytics/metrics.ts`
|
||||
- [x] Corriger 7 imports externes (actions, hooks, components)
|
||||
- [x] **Déplacer `manager-summary.ts`** → `analytics/manager-summary.ts`
|
||||
- [x] Corriger 3 imports externes (components, pages)
|
||||
- [x] Corriger imports database vers ../core/database
|
||||
|
||||
### Phase 3: Data Management ✅
|
||||
- [x] **Déplacer `backup.ts`** → `data-management/backup.ts`
|
||||
- [x] Corriger 6 imports externes (clients, components, pages, API)
|
||||
- [x] Corriger imports relatifs vers ../core/ et ../../lib/
|
||||
- [x] **Déplacer `backup-scheduler.ts`** → `data-management/backup-scheduler.ts`
|
||||
- [x] Corriger import dans script backup-manager.ts
|
||||
- [x] Corriger imports relatifs entre services
|
||||
|
||||
### Phase 4: Task Management ✅
|
||||
- [x] **Déplacer `tasks.ts`** → `task-management/tasks.ts`
|
||||
- [x] Corriger 7 imports externes (pages, API routes, actions)
|
||||
- [x] Corriger import dans script seed-data.ts
|
||||
- [x] **Déplacer `tags.ts`** → `task-management/tags.ts`
|
||||
- [x] Corriger 8 imports externes (pages, API routes, actions)
|
||||
- [x] Corriger import dans script seed-tags.ts
|
||||
- [x] **Déplacer `daily.ts`** → `task-management/daily.ts`
|
||||
- [x] Corriger 6 imports externes (pages, API routes, actions)
|
||||
- [x] Corriger imports relatifs vers ../core/database
|
||||
|
||||
### 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
|
||||
- [x] **Uniformiser les imports absolus** dans tous les services
|
||||
- [x] Remplacer tous les imports relatifs `../` par `@/services/...`
|
||||
- [x] Corriger l'import dynamique dans system-info.ts
|
||||
- [x] 12 imports relatifs → imports absolus cohérents
|
||||
- [ ] **Isolation et organisation des types & interfaces**
|
||||
- [ ] **Analytics types** (`src/services/analytics/types.ts`)
|
||||
- [ ] Extraire `TaskType`, `CheckboxType` de `manager-summary.ts`
|
||||
- [ ] Extraire `KeyAccomplishment`, `UpcomingChallenge`, `ManagerSummary` de `manager-summary.ts`
|
||||
- [ ] Créer `types.ts` centralisé pour le dossier analytics
|
||||
- [ ] Remplacer tous les imports par `import type { ... } from './types'`
|
||||
- [ ] **Task Management types** (`src/services/task-management/types.ts`)
|
||||
- [ ] Analyser quels types spécifiques manquent aux services tasks/tags/daily
|
||||
- [ ] Créer `types.ts` pour les types métier spécifiques au task-management
|
||||
- [ ] Uniformiser les imports avec `import type { ... } from './types'`
|
||||
- [ ] **Jira Integration types** (`src/services/integrations/jira/types.ts`)
|
||||
- [ ] Extraire `CacheEntry` de `analytics-cache.ts`
|
||||
- [ ] Créer types spécifiques aux services Jira (configs, cache, anomalies)
|
||||
- [ ] Centraliser les types d'intégration Jira
|
||||
- [ ] Uniformiser les imports avec `import type { ... } from './types'`
|
||||
- [ ] **TFS Integration types** (`src/services/integrations/types.ts`)
|
||||
- [ ] Analyser les types spécifiques à TFS dans `tfs.ts`
|
||||
- [ ] Créer types d'intégration TFS si nécessaire
|
||||
- [ ] Préparer structure extensible pour futures intégrations
|
||||
- [ ] **Core services types** (`src/services/core/types.ts`)
|
||||
- [ ] Analyser si des types spécifiques aux services core sont nécessaires
|
||||
- [ ] Types pour database, system-info, user-preferences
|
||||
- [ ] **Conversion des imports en `import type`**
|
||||
- [ ] Analyser tous les imports de types depuis `@/lib/types` dans services
|
||||
- [ ] Remplacer par `import type { ... } from '@/lib/types'` quand applicable
|
||||
- [ ] Vérifier que les imports de valeurs restent normaux (sans `type`)
|
||||
|
||||
### 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)
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
* Usage: tsx scripts/backup-manager.ts [command] [options]
|
||||
*/
|
||||
|
||||
import { backupService, BackupConfig } from '../src/services/backup';
|
||||
import { backupScheduler } from '../src/services/backup-scheduler';
|
||||
import { backupService, BackupConfig } from '../src/services/data-management/backup';
|
||||
import { backupScheduler } from '../src/services/data-management/backup-scheduler';
|
||||
import { formatDateForDisplay } from '../src/lib/date-utils';
|
||||
|
||||
interface CliOptions {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { tasksService } from '../src/services/tasks';
|
||||
import { tasksService } from '../src/services/task-management/tasks';
|
||||
import { TaskStatus, TaskPriority } from '../src/lib/types';
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { tagsService } from '../src/services/tags';
|
||||
import { tagsService } from '../src/services/task-management/tags';
|
||||
|
||||
async function seedTags() {
|
||||
console.log('🏷️ Création des tags de test...');
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
'use server';
|
||||
|
||||
import { AnalyticsService, ProductivityMetrics, TimeRange } from '@/services/analytics';
|
||||
import { AnalyticsService, ProductivityMetrics, TimeRange } from '@/services/analytics/analytics';
|
||||
|
||||
export async function getProductivityMetrics(timeRange?: TimeRange): Promise<{
|
||||
success: boolean;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
'use server';
|
||||
|
||||
import { dailyService } from '@/services/daily';
|
||||
import { dailyService } from '@/services/task-management/daily';
|
||||
import { UpdateDailyCheckboxData, DailyCheckbox, CreateDailyCheckboxData } from '@/lib/types';
|
||||
import { revalidatePath } from 'next/cache';
|
||||
import { getToday, getPreviousWorkday, parseDate, normalizeDate } from '@/lib/date-utils';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use server';
|
||||
|
||||
import { JiraAnalyticsService } from '@/services/jira-analytics';
|
||||
import { userPreferencesService } from '@/services/user-preferences';
|
||||
import { JiraAnalyticsService } from '@/services/integrations/jira/analytics';
|
||||
import { userPreferencesService } from '@/services/core/user-preferences';
|
||||
import { JiraAnalytics } from '@/lib/types';
|
||||
|
||||
export type JiraAnalyticsResult = {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
'use server';
|
||||
|
||||
import { jiraAnomalyDetection, JiraAnomaly, AnomalyDetectionConfig } from '@/services/jira-anomaly-detection';
|
||||
import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/jira-analytics';
|
||||
import { userPreferencesService } from '@/services/user-preferences';
|
||||
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 {
|
||||
success: boolean;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
'use server';
|
||||
|
||||
import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/jira-analytics';
|
||||
import { JiraAdvancedFiltersService } from '@/services/jira-advanced-filters';
|
||||
import { userPreferencesService } from '@/services/user-preferences';
|
||||
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';
|
||||
|
||||
export interface FiltersResult {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use server';
|
||||
|
||||
import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/jira-analytics';
|
||||
import { userPreferencesService } from '@/services/user-preferences';
|
||||
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';
|
||||
import { parseDate } from '@/lib/date-utils';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
'use server';
|
||||
|
||||
import { MetricsService, WeeklyMetricsOverview, VelocityTrend } from '@/services/metrics';
|
||||
import { MetricsService, WeeklyMetricsOverview, VelocityTrend } from '@/services/analytics/metrics';
|
||||
import { getToday } from '@/lib/date-utils';
|
||||
|
||||
/**
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
'use server';
|
||||
|
||||
import { SystemInfoService } from '@/services/system-info';
|
||||
import { SystemInfoService } from '@/services/core/system-info';
|
||||
|
||||
export async function getSystemInfo() {
|
||||
try {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
'use server';
|
||||
|
||||
import { tagsService } from '@/services/tags';
|
||||
import { tagsService } from '@/services/task-management/tags';
|
||||
import { revalidatePath } from 'next/cache';
|
||||
import { Tag } from '@/lib/types';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
'use server'
|
||||
|
||||
import { tasksService } from '@/services/tasks';
|
||||
import { tasksService } from '@/services/task-management/tasks';
|
||||
import { revalidatePath } from 'next/cache';
|
||||
import { TaskStatus, TaskPriority } from '@/lib/types';
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
'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';
|
||||
import { tfsService, TfsConfig } from '@/services/integrations/tfs';
|
||||
|
||||
/**
|
||||
* Sauvegarde la configuration TFS
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { backupService } from '@/services/backup';
|
||||
import { backupService } from '@/services/data-management/backup';
|
||||
|
||||
interface RouteParams {
|
||||
params: Promise<{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { backupService } from '@/services/backup';
|
||||
import { backupScheduler } from '@/services/backup-scheduler';
|
||||
import { backupService } from '@/services/data-management/backup';
|
||||
import { backupScheduler } from '@/services/data-management/backup-scheduler';
|
||||
|
||||
export async function GET(request: NextRequest) {
|
||||
try {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { dailyService } from '@/services/daily';
|
||||
import { dailyService } from '@/services/task-management/daily';
|
||||
|
||||
export async function PATCH(
|
||||
request: NextRequest,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import { dailyService } from '@/services/daily';
|
||||
import { dailyService } from '@/services/task-management/daily';
|
||||
|
||||
/**
|
||||
* API route pour récupérer toutes les dates avec des dailies
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { dailyService } from '@/services/daily';
|
||||
import { dailyService } from '@/services/task-management/daily';
|
||||
import { DailyCheckboxType } from '@/lib/types';
|
||||
|
||||
export async function GET(request: NextRequest) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import { dailyService } from '@/services/daily';
|
||||
import { dailyService } from '@/services/task-management/daily';
|
||||
import { getToday, parseDate, isValidAPIDate, createDateFromParts } from '@/lib/date-utils';
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import { createJiraService, JiraService } from '@/services/jira';
|
||||
import { userPreferencesService } from '@/services/user-preferences';
|
||||
import { jiraScheduler } from '@/services/jira-scheduler';
|
||||
import { createJiraService, JiraService } from '@/services/integrations/jira/jira';
|
||||
import { userPreferencesService } from '@/services/core/user-preferences';
|
||||
import { jiraScheduler } from '@/services/integrations/jira/scheduler';
|
||||
|
||||
/**
|
||||
* Route POST /api/jira/sync
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { createJiraService } from '@/services/jira';
|
||||
import { userPreferencesService } from '@/services/user-preferences';
|
||||
import { createJiraService } from '@/services/integrations/jira/jira';
|
||||
import { userPreferencesService } from '@/services/core/user-preferences';
|
||||
|
||||
/**
|
||||
* POST /api/jira/validate-project
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { tagsService } from '@/services/tags';
|
||||
import { tagsService } from '@/services/task-management/tags';
|
||||
|
||||
/**
|
||||
* GET /api/tags/[id] - Récupère un tag par son ID
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { tagsService } from '@/services/tags';
|
||||
import { tagsService } from '@/services/task-management/tags';
|
||||
|
||||
/**
|
||||
* GET /api/tags - Récupère tous les tags ou recherche par query
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { tasksService } from '@/services/tasks';
|
||||
import { tasksService } from '@/services/task-management/tasks';
|
||||
|
||||
export async function GET(
|
||||
request: NextRequest,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import { tasksService } from '@/services/tasks';
|
||||
import { tasksService } from '@/services/task-management/tasks';
|
||||
import { TaskStatus } from '@/lib/types';
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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';
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Metadata } from 'next';
|
||||
import { DailyPageClient } from './DailyPageClient';
|
||||
import { dailyService } from '@/services/daily';
|
||||
import { dailyService } from '@/services/task-management/daily';
|
||||
import { getToday } from '@/lib/date-utils';
|
||||
|
||||
// Force dynamic rendering (no static generation)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { userPreferencesService } from '@/services/user-preferences';
|
||||
import { userPreferencesService } from '@/services/core/user-preferences';
|
||||
import { JiraDashboardPageClient } from './JiraDashboardPageClient';
|
||||
|
||||
// Force dynamic rendering
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { tasksService } from '@/services/tasks';
|
||||
import { tagsService } from '@/services/tags';
|
||||
import { tasksService } from '@/services/task-management/tasks';
|
||||
import { tagsService } from '@/services/task-management/tags';
|
||||
import { KanbanPageClient } from './KanbanPageClient';
|
||||
|
||||
// Force dynamic rendering (no static generation)
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { tasksService } from '@/services/tasks';
|
||||
import { tagsService } from '@/services/tags';
|
||||
import { tasksService } from '@/services/task-management/tasks';
|
||||
import { tagsService } from '@/services/task-management/tags';
|
||||
import { HomePageClient } from '@/components/HomePageClient';
|
||||
|
||||
// Force dynamic rendering (no static generation)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { tasksService } from '@/services/tasks';
|
||||
import { tagsService } from '@/services/tags';
|
||||
import { backupService } from '@/services/backup';
|
||||
import { backupScheduler } from '@/services/backup-scheduler';
|
||||
import { tasksService } from '@/services/task-management/tasks';
|
||||
import { tagsService } from '@/services/task-management/tags';
|
||||
import { backupService } from '@/services/data-management/backup';
|
||||
import { backupScheduler } from '@/services/data-management/backup-scheduler';
|
||||
import { AdvancedSettingsPageClient } from '@/components/settings/AdvancedSettingsPageClient';
|
||||
|
||||
// Force dynamic rendering for real-time data
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import BackupSettingsPageClient from '@/components/settings/BackupSettingsPageClient';
|
||||
import { backupService } from '@/services/backup';
|
||||
import { backupScheduler } from '@/services/backup-scheduler';
|
||||
import { backupService } from '@/services/data-management/backup';
|
||||
import { backupScheduler } from '@/services/data-management/backup-scheduler';
|
||||
|
||||
// Force dynamic rendering pour les données en temps réel
|
||||
export const dynamic = 'force-dynamic';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { tagsService } from '@/services/tags';
|
||||
import { tagsService } from '@/services/task-management/tags';
|
||||
import { GeneralSettingsPageClient } from '@/components/settings/GeneralSettingsPageClient';
|
||||
|
||||
// Force dynamic rendering for real-time data
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
import { TasksProvider } from '@/contexts/TasksContext';
|
||||
import ManagerWeeklySummary from '@/components/dashboard/ManagerWeeklySummary';
|
||||
import { ManagerSummary } from '@/services/manager-summary';
|
||||
import { ManagerSummary } from '@/services/analytics/manager-summary';
|
||||
import { Task, Tag } from '@/lib/types';
|
||||
|
||||
interface WeeklyManagerPageClientProps {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Header } from '@/components/ui/Header';
|
||||
import { ManagerSummaryService } from '@/services/manager-summary';
|
||||
import { tasksService } from '@/services/tasks';
|
||||
import { tagsService } from '@/services/tags';
|
||||
import { ManagerSummaryService } from '@/services/analytics/manager-summary';
|
||||
import { tasksService } from '@/services/task-management/tasks';
|
||||
import { tagsService } from '@/services/task-management/tags';
|
||||
import { WeeklyManagerPageClient } from './WeeklyManagerPageClient';
|
||||
|
||||
// Force dynamic rendering (no static generation)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { httpClient } from './base/http-client';
|
||||
import { BackupInfo, BackupConfig } from '@/services/backup';
|
||||
import { BackupInfo, BackupConfig } from '@/services/data-management/backup';
|
||||
|
||||
export interface BackupListResponse {
|
||||
backups: BackupInfo[];
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import { useState } from 'react';
|
||||
import { ManagerSummary } from '@/services/manager-summary';
|
||||
import { ManagerSummary } from '@/services/analytics/manager-summary';
|
||||
import { Card, CardHeader, CardContent } from '@/components/ui/Card';
|
||||
import { Button } from '@/components/ui/Button';
|
||||
import { TagDisplay } from '@/components/ui/TagDisplay';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import { useState, useEffect, useTransition } from 'react';
|
||||
import { ProductivityMetrics } from '@/services/analytics';
|
||||
import { ProductivityMetrics } from '@/services/analytics/analytics';
|
||||
import { getProductivityMetrics } from '@/actions/analytics';
|
||||
import { CompletionTrendChart } from '@/components/charts/CompletionTrendChart';
|
||||
import { VelocityChart } from '@/components/charts/VelocityChart';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts';
|
||||
import { DailyMetrics } from '@/services/metrics';
|
||||
import { DailyMetrics } from '@/services/analytics/metrics';
|
||||
import { parseDate, formatDateShort } from '@/lib/date-utils';
|
||||
|
||||
interface CompletionRateChartProps {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, Legend } from 'recharts';
|
||||
import { DailyMetrics } from '@/services/metrics';
|
||||
import { DailyMetrics } from '@/services/analytics/metrics';
|
||||
import { parseDate, formatDateShort } from '@/lib/date-utils';
|
||||
|
||||
interface DailyStatusChartProps {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
'use client';
|
||||
|
||||
import { DailyMetrics } from '@/services/metrics';
|
||||
import { DailyMetrics } from '@/services/analytics/metrics';
|
||||
|
||||
interface ProductivityInsightsProps {
|
||||
data: DailyMetrics[];
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, Legend } from 'recharts';
|
||||
import { VelocityTrend } from '@/services/metrics';
|
||||
import { VelocityTrend } from '@/services/analytics/metrics';
|
||||
|
||||
interface VelocityTrendChartProps {
|
||||
data: VelocityTrend[];
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
'use client';
|
||||
|
||||
import { DailyMetrics } from '@/services/metrics';
|
||||
import { DailyMetrics } from '@/services/analytics/metrics';
|
||||
import { parseDate, isToday } from '@/lib/date-utils';
|
||||
|
||||
interface WeeklyActivityHeatmapProps {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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[];
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
import { useState, useEffect } from 'react';
|
||||
import { backupClient, BackupListResponse } from '@/clients/backup-client';
|
||||
import { BackupConfig } from '@/services/backup';
|
||||
import { BackupConfig } from '@/services/data-management/backup';
|
||||
import { Button } from '@/components/ui/Button';
|
||||
import { Card, CardHeader, CardContent } from '@/components/ui/Card';
|
||||
import { Input } from '@/components/ui/Input';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useState, useEffect, useTransition, useCallback } from 'react';
|
||||
import { getWeeklyMetrics, getVelocityTrends } from '@/actions/metrics';
|
||||
import { WeeklyMetricsOverview, VelocityTrend } from '@/services/metrics';
|
||||
import { WeeklyMetricsOverview, VelocityTrend } from '@/services/analytics/metrics';
|
||||
|
||||
// Export des types pour les composants
|
||||
export type WeeklyMetrics = WeeklyMetricsOverview;
|
||||
|
||||
@@ -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>({
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Task, TaskStatus, TaskPriority, TaskSource } from '@/lib/types';
|
||||
import { prisma } from './database';
|
||||
import { prisma } from '@/services/core/database';
|
||||
import { getToday, parseDate, subtractDays } from '@/lib/date-utils';
|
||||
|
||||
export interface ProductivityMetrics {
|
||||
@@ -1,4 +1,4 @@
|
||||
import { prisma } from './database';
|
||||
import { prisma } from '@/services/core/database';
|
||||
import { startOfWeek, endOfWeek } from 'date-fns';
|
||||
import { getToday } from '@/lib/date-utils';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { prisma } from './database';
|
||||
import { prisma } from '@/services/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';
|
||||
@@ -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('@/services/data-management/backup');
|
||||
const backups = await backupService.listBackups();
|
||||
return backups.length;
|
||||
} catch (error) {
|
||||
@@ -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';
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { promises as fs } from 'fs';
|
||||
import path from 'path';
|
||||
import { prisma } from './database';
|
||||
import { userPreferencesService } from './user-preferences';
|
||||
import { BackupUtils } from '../lib/backup-utils';
|
||||
import { prisma } from '@/services/core/database';
|
||||
import { userPreferencesService } from '@/services/core/user-preferences';
|
||||
import { BackupUtils } from '@/lib/backup-utils';
|
||||
import { getToday } from '@/lib/date-utils';
|
||||
|
||||
export interface BackupConfig {
|
||||
@@ -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,
|
||||
@@ -4,7 +4,7 @@
|
||||
*/
|
||||
|
||||
import { JiraTask } from '@/lib/types';
|
||||
import { prisma } from './database';
|
||||
import { prisma } from '@/services/core/database';
|
||||
import { parseDate, formatDateForDisplay } from '@/lib/date-utils';
|
||||
|
||||
export interface JiraConfig {
|
||||
@@ -1,4 +1,4 @@
|
||||
import { userPreferencesService } from './user-preferences';
|
||||
import { userPreferencesService } from '@/services/core/user-preferences';
|
||||
import { JiraService } from './jira';
|
||||
import { addMinutes, getToday } from '@/lib/date-utils';
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
*/
|
||||
|
||||
import { TfsPullRequest } from '@/lib/types';
|
||||
import { prisma } from './database';
|
||||
import { prisma } from '@/services/core/database';
|
||||
import { parseDate, formatDateForDisplay } from '@/lib/date-utils';
|
||||
import { userPreferencesService } from './user-preferences';
|
||||
import { userPreferencesService } from '@/services/core/user-preferences';
|
||||
|
||||
export interface TfsConfig {
|
||||
enabled: boolean;
|
||||
@@ -1,4 +1,4 @@
|
||||
import { prisma } from './database';
|
||||
import { prisma } from '@/services/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';
|
||||
@@ -1,4 +1,4 @@
|
||||
import { prisma } from './database';
|
||||
import { prisma } from '@/services/core/database';
|
||||
import { Prisma } from '@prisma/client';
|
||||
import { Tag } from '@/lib/types';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { prisma } from './database';
|
||||
import { prisma } from '@/services/core/database';
|
||||
import { Task, TaskStatus, TaskPriority, TaskSource, BusinessError, DailyCheckbox, DailyCheckboxType } from '@/lib/types';
|
||||
import { Prisma } from '@prisma/client';
|
||||
import { getToday } from '@/lib/date-utils';
|
||||
Reference in New Issue
Block a user