7 Commits

Author SHA1 Message Date
Julien Froidefond
f9c92f9efd doc: todo.md completion 2025-09-23 10:45:57 +02:00
Julien Froidefond
bbb4e543c4 feat: enhance type organization and import structure
- Added detailed tasks in `TODO.md` for isolating and organizing types/interfaces across various services, including analytics, task management, and integrations.
- Updated imports in multiple files to use the new `@/services/core/database` path for consistency.
- Ensured all type imports are converted to `import type { ... }` where applicable for better clarity and performance.
2025-09-23 10:35:52 +02:00
Julien Froidefond
88ab8c9334 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.
2025-09-23 10:32:25 +02:00
Julien Froidefond
f5417040fd feat: complete Phase 4 of service refactoring
- Marked tasks in `TODO.md` as completed for moving task-related files to the `task-management` directory and correcting imports across the codebase.
- Updated imports in `seed-data.ts`, `seed-tags.ts`, API routes, and various components to reflect the new structure.
- Removed obsolete `daily.ts`, `tags.ts`, and `tasks.ts` files to streamline the codebase.
- Added new tasks in `TODO.md` for future cleaning and organization of service imports.
2025-09-23 10:25:41 +02:00
Julien Froidefond
b8e0307f03 feat: complete Phase 3 of service refactoring
- Marked tasks in `TODO.md` as completed for moving backup-related files to the `data-management` directory and correcting imports across the codebase.
- Updated imports in `backup-manager.ts`, API routes, and various components to reflect the new structure.
- Removed obsolete `backup.ts` and `backup-scheduler.ts` files to streamline the codebase.
- Added new tasks in `TODO.md` for future cleaning and organization of service imports.
2025-09-23 10:20:56 +02:00
Julien Froidefond
ed16e2bb80 feat: complete Phase 2 of service refactoring
- Marked tasks in `TODO.md` as completed for moving analytics-related files to the `analytics` directory and correcting imports across the codebase.
- Updated imports in `src/actions/analytics.ts`, `src/actions/metrics.ts`, and various components to reflect the new structure.
- Removed unused `analytics.ts`, `manager-summary.ts`, and `metrics.ts` files to streamline the codebase.
2025-09-23 10:15:13 +02:00
Julien Froidefond
f88954bf81 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.
2025-09-23 10:10:34 +02:00
92 changed files with 214 additions and 109 deletions

105
TODO.md
View File

@@ -86,6 +86,111 @@
- [ ] Configuration unifiée des filtres et synchronisations - [ ] Configuration unifiée des filtres et synchronisations
- [ ] Dashboard multi-intégrations - [ ] 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) ### 👥 Gestion multi-utilisateurs (PROJET MAJEUR)

View File

@@ -4,8 +4,8 @@
* Usage: tsx scripts/backup-manager.ts [command] [options] * Usage: tsx scripts/backup-manager.ts [command] [options]
*/ */
import { backupService, BackupConfig } from '../src/services/backup'; import { backupService, BackupConfig } from '../src/services/data-management/backup';
import { backupScheduler } from '../src/services/backup-scheduler'; import { backupScheduler } from '../src/services/data-management/backup-scheduler';
import { formatDateForDisplay } from '../src/lib/date-utils'; import { formatDateForDisplay } from '../src/lib/date-utils';
interface CliOptions { interface CliOptions {

View File

@@ -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 * Script pour reset la base de données et supprimer les anciennes données

View File

@@ -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'; import { TaskStatus, TaskPriority } from '../src/lib/types';
/** /**

View File

@@ -1,4 +1,4 @@
import { tagsService } from '../src/services/tags'; import { tagsService } from '../src/services/task-management/tags';
async function seedTags() { async function seedTags() {
console.log('🏷️ Création des tags de test...'); console.log('🏷️ Création des tags de test...');

View File

@@ -1,6 +1,6 @@
'use server'; 'use server';
import { AnalyticsService, ProductivityMetrics, TimeRange } from '@/services/analytics'; import { AnalyticsService, ProductivityMetrics, TimeRange } from '@/services/analytics/analytics';
export async function getProductivityMetrics(timeRange?: TimeRange): Promise<{ export async function getProductivityMetrics(timeRange?: TimeRange): Promise<{
success: boolean; success: boolean;

View File

@@ -1,6 +1,6 @@
'use server'; 'use server';
import { dailyService } from '@/services/daily'; import { dailyService } from '@/services/task-management/daily';
import { UpdateDailyCheckboxData, DailyCheckbox, CreateDailyCheckboxData } from '@/lib/types'; import { UpdateDailyCheckboxData, DailyCheckbox, CreateDailyCheckboxData } from '@/lib/types';
import { revalidatePath } from 'next/cache'; import { revalidatePath } from 'next/cache';
import { getToday, getPreviousWorkday, parseDate, normalizeDate } from '@/lib/date-utils'; import { getToday, getPreviousWorkday, parseDate, normalizeDate } from '@/lib/date-utils';

View File

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

View File

@@ -1,8 +1,8 @@
'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/user-preferences'; import { userPreferencesService } from '@/services/core/user-preferences';
export interface AnomalyDetectionResult { export interface AnomalyDetectionResult {
success: boolean; success: boolean;

View File

@@ -1,8 +1,8 @@
'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/user-preferences'; import { userPreferencesService } from '@/services/core/user-preferences';
import { AvailableFilters, JiraAnalyticsFilters, JiraAnalytics } from '@/lib/types'; import { AvailableFilters, JiraAnalyticsFilters, JiraAnalytics } from '@/lib/types';
export interface FiltersResult { export interface FiltersResult {

View File

@@ -1,7 +1,7 @@
'use server'; 'use server';
import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/jira-analytics'; import { JiraAnalyticsService, JiraAnalyticsConfig } from '@/services/integrations/jira/analytics';
import { userPreferencesService } from '@/services/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';
import { parseDate } from '@/lib/date-utils'; import { parseDate } from '@/lib/date-utils';

View File

@@ -1,6 +1,6 @@
'use server'; 'use server';
import { MetricsService, WeeklyMetricsOverview, VelocityTrend } from '@/services/metrics'; import { MetricsService, WeeklyMetricsOverview, VelocityTrend } from '@/services/analytics/metrics';
import { getToday } from '@/lib/date-utils'; import { getToday } from '@/lib/date-utils';
/** /**

View File

@@ -1,6 +1,6 @@
'use server'; 'use server';
import { userPreferencesService } from '@/services/user-preferences'; import { userPreferencesService } from '@/services/core/user-preferences';
import { KanbanFilters, ViewPreferences, ColumnVisibility, TaskStatus } from '@/lib/types'; import { KanbanFilters, ViewPreferences, ColumnVisibility, TaskStatus } from '@/lib/types';
import { revalidatePath } from 'next/cache'; import { revalidatePath } from 'next/cache';

View File

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

View File

@@ -1,6 +1,6 @@
'use server'; 'use server';
import { tagsService } from '@/services/tags'; import { tagsService } from '@/services/task-management/tags';
import { revalidatePath } from 'next/cache'; import { revalidatePath } from 'next/cache';
import { Tag } from '@/lib/types'; import { Tag } from '@/lib/types';

View File

@@ -1,6 +1,6 @@
'use server' 'use server'
import { tasksService } from '@/services/tasks'; import { tasksService } from '@/services/task-management/tasks';
import { revalidatePath } from 'next/cache'; import { revalidatePath } from 'next/cache';
import { TaskStatus, TaskPriority } from '@/lib/types'; import { TaskStatus, TaskPriority } from '@/lib/types';

View File

@@ -1,8 +1,8 @@
'use server'; 'use server';
import { userPreferencesService } from '@/services/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

View File

@@ -1,5 +1,5 @@
import { NextRequest, NextResponse } from 'next/server'; import { NextRequest, NextResponse } from 'next/server';
import { backupService } from '@/services/backup'; import { backupService } from '@/services/data-management/backup';
interface RouteParams { interface RouteParams {
params: Promise<{ params: Promise<{

View File

@@ -1,6 +1,6 @@
import { NextRequest, NextResponse } from 'next/server'; import { NextRequest, NextResponse } from 'next/server';
import { backupService } from '@/services/backup'; import { backupService } from '@/services/data-management/backup';
import { backupScheduler } from '@/services/backup-scheduler'; import { backupScheduler } from '@/services/data-management/backup-scheduler';
export async function GET(request: NextRequest) { export async function GET(request: NextRequest) {
try { try {

View File

@@ -1,5 +1,5 @@
import { NextRequest, NextResponse } from 'next/server'; import { NextRequest, NextResponse } from 'next/server';
import { dailyService } from '@/services/daily'; import { dailyService } from '@/services/task-management/daily';
export async function PATCH( export async function PATCH(
request: NextRequest, request: NextRequest,

View File

@@ -1,5 +1,5 @@
import { NextResponse } from 'next/server'; 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 * API route pour récupérer toutes les dates avec des dailies

View File

@@ -1,5 +1,5 @@
import { NextRequest, NextResponse } from 'next/server'; import { NextRequest, NextResponse } from 'next/server';
import { dailyService } from '@/services/daily'; import { dailyService } from '@/services/task-management/daily';
import { DailyCheckboxType } from '@/lib/types'; import { DailyCheckboxType } from '@/lib/types';
export async function GET(request: NextRequest) { export async function GET(request: NextRequest) {

View File

@@ -1,5 +1,5 @@
import { NextResponse } from 'next/server'; 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'; import { getToday, parseDate, isValidAPIDate, createDateFromParts } from '@/lib/date-utils';
/** /**

View File

@@ -1,5 +1,5 @@
import { NextRequest, NextResponse } from 'next/server'; import { NextRequest, NextResponse } from 'next/server';
import { prisma } from '@/services/database'; import { prisma } from '@/services/core/database';
/** /**
* Route GET /api/jira/logs * Route GET /api/jira/logs

View File

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

View File

@@ -1,6 +1,6 @@
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/user-preferences'; import { userPreferencesService } from '@/services/core/user-preferences';
/** /**
* POST /api/jira/validate-project * POST /api/jira/validate-project

View File

@@ -1,5 +1,5 @@
import { NextRequest, NextResponse } from 'next/server'; 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 * GET /api/tags/[id] - Récupère un tag par son ID

View File

@@ -1,5 +1,5 @@
import { NextRequest, NextResponse } from 'next/server'; 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 * GET /api/tags - Récupère tous les tags ou recherche par query

View File

@@ -1,5 +1,5 @@
import { NextRequest, NextResponse } from 'next/server'; import { NextRequest, NextResponse } from 'next/server';
import { tasksService } from '@/services/tasks'; import { tasksService } from '@/services/task-management/tasks';
export async function GET( export async function GET(
request: NextRequest, request: NextRequest,

View File

@@ -1,5 +1,5 @@
import { NextResponse } from 'next/server'; import { NextResponse } from 'next/server';
import { tasksService } from '@/services/tasks'; import { tasksService } from '@/services/task-management/tasks';
import { TaskStatus } from '@/lib/types'; import { TaskStatus } from '@/lib/types';
/** /**

View File

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

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
import { NextRequest, NextResponse } from 'next/server'; import { NextRequest, NextResponse } from 'next/server';
import { userPreferencesService } from '@/services/user-preferences'; import { userPreferencesService } from '@/services/core/user-preferences';
import { JiraConfig } from '@/lib/types'; import { JiraConfig } from '@/lib/types';
/** /**

View File

@@ -1,5 +1,5 @@
import { NextRequest, NextResponse } from 'next/server'; 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 * GET /api/user-preferences - Récupère toutes les préférences utilisateur

View File

@@ -1,6 +1,6 @@
import { Metadata } from 'next'; import { Metadata } from 'next';
import { DailyPageClient } from './DailyPageClient'; import { DailyPageClient } from './DailyPageClient';
import { dailyService } from '@/services/daily'; import { dailyService } from '@/services/task-management/daily';
import { getToday } from '@/lib/date-utils'; import { getToday } from '@/lib/date-utils';
// Force dynamic rendering (no static generation) // Force dynamic rendering (no static generation)

View File

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

View File

@@ -1,5 +1,5 @@
import { tasksService } from '@/services/tasks'; import { tasksService } from '@/services/task-management/tasks';
import { tagsService } from '@/services/tags'; import { tagsService } from '@/services/task-management/tags';
import { KanbanPageClient } from './KanbanPageClient'; import { KanbanPageClient } from './KanbanPageClient';
// Force dynamic rendering (no static generation) // Force dynamic rendering (no static generation)

View File

@@ -4,7 +4,7 @@ import "./globals.css";
import { ThemeProvider } from "@/contexts/ThemeContext"; import { ThemeProvider } from "@/contexts/ThemeContext";
import { JiraConfigProvider } from "@/contexts/JiraConfigContext"; import { JiraConfigProvider } from "@/contexts/JiraConfigContext";
import { UserPreferencesProvider } from "@/contexts/UserPreferencesContext"; import { UserPreferencesProvider } from "@/contexts/UserPreferencesContext";
import { userPreferencesService } from "@/services/user-preferences"; import { userPreferencesService } from "@/services/core/user-preferences";
const geistSans = Geist({ const geistSans = Geist({
variable: "--font-geist-sans", variable: "--font-geist-sans",

View File

@@ -1,5 +1,5 @@
import { tasksService } from '@/services/tasks'; import { tasksService } from '@/services/task-management/tasks';
import { tagsService } from '@/services/tags'; import { tagsService } from '@/services/task-management/tags';
import { HomePageClient } from '@/components/HomePageClient'; import { HomePageClient } from '@/components/HomePageClient';
// Force dynamic rendering (no static generation) // Force dynamic rendering (no static generation)

View File

@@ -1,7 +1,7 @@
import { tasksService } from '@/services/tasks'; import { tasksService } from '@/services/task-management/tasks';
import { tagsService } from '@/services/tags'; import { tagsService } from '@/services/task-management/tags';
import { backupService } from '@/services/backup'; import { backupService } from '@/services/data-management/backup';
import { backupScheduler } from '@/services/backup-scheduler'; import { backupScheduler } from '@/services/data-management/backup-scheduler';
import { AdvancedSettingsPageClient } from '@/components/settings/AdvancedSettingsPageClient'; import { AdvancedSettingsPageClient } from '@/components/settings/AdvancedSettingsPageClient';
// Force dynamic rendering for real-time data // Force dynamic rendering for real-time data

View File

@@ -1,6 +1,6 @@
import BackupSettingsPageClient from '@/components/settings/BackupSettingsPageClient'; import BackupSettingsPageClient from '@/components/settings/BackupSettingsPageClient';
import { backupService } from '@/services/backup'; import { backupService } from '@/services/data-management/backup';
import { backupScheduler } from '@/services/backup-scheduler'; import { backupScheduler } from '@/services/data-management/backup-scheduler';
// Force dynamic rendering pour les données en temps réel // Force dynamic rendering pour les données en temps réel
export const dynamic = 'force-dynamic'; export const dynamic = 'force-dynamic';

View File

@@ -1,4 +1,4 @@
import { tagsService } from '@/services/tags'; import { tagsService } from '@/services/task-management/tags';
import { GeneralSettingsPageClient } from '@/components/settings/GeneralSettingsPageClient'; import { GeneralSettingsPageClient } from '@/components/settings/GeneralSettingsPageClient';
// Force dynamic rendering for real-time data // Force dynamic rendering for real-time data

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'; import { IntegrationsSettingsPageClient } from '@/components/settings/IntegrationsSettingsPageClient';
// Force dynamic rendering for real-time data // 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'; import { SettingsIndexPageClient } from '@/components/settings/SettingsIndexPageClient';
// Force dynamic rendering (no static generation) // Force dynamic rendering (no static generation)

View File

@@ -2,7 +2,7 @@
import { TasksProvider } from '@/contexts/TasksContext'; import { TasksProvider } from '@/contexts/TasksContext';
import ManagerWeeklySummary from '@/components/dashboard/ManagerWeeklySummary'; 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'; import { Task, Tag } from '@/lib/types';
interface WeeklyManagerPageClientProps { interface WeeklyManagerPageClientProps {

View File

@@ -1,7 +1,7 @@
import { Header } from '@/components/ui/Header'; import { Header } from '@/components/ui/Header';
import { ManagerSummaryService } from '@/services/manager-summary'; import { ManagerSummaryService } from '@/services/analytics/manager-summary';
import { tasksService } from '@/services/tasks'; import { tasksService } from '@/services/task-management/tasks';
import { tagsService } from '@/services/tags'; import { tagsService } from '@/services/task-management/tags';
import { WeeklyManagerPageClient } from './WeeklyManagerPageClient'; import { WeeklyManagerPageClient } from './WeeklyManagerPageClient';
// Force dynamic rendering (no static generation) // Force dynamic rendering (no static generation)

View File

@@ -1,5 +1,5 @@
import { httpClient } from './base/http-client'; import { httpClient } from './base/http-client';
import { BackupInfo, BackupConfig } from '@/services/backup'; import { BackupInfo, BackupConfig } from '@/services/data-management/backup';
export interface BackupListResponse { export interface BackupListResponse {
backups: BackupInfo[]; backups: BackupInfo[];

View File

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

View File

@@ -1,7 +1,7 @@
'use client'; 'use client';
import { useState } from 'react'; 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 { Card, CardHeader, CardContent } from '@/components/ui/Card';
import { Button } from '@/components/ui/Button'; import { Button } from '@/components/ui/Button';
import { TagDisplay } from '@/components/ui/TagDisplay'; import { TagDisplay } from '@/components/ui/TagDisplay';

View File

@@ -1,7 +1,7 @@
'use client'; 'use client';
import { useState, useEffect, useTransition } from 'react'; import { useState, useEffect, useTransition } from 'react';
import { ProductivityMetrics } from '@/services/analytics'; import { ProductivityMetrics } from '@/services/analytics/analytics';
import { getProductivityMetrics } from '@/actions/analytics'; import { getProductivityMetrics } from '@/actions/analytics';
import { CompletionTrendChart } from '@/components/charts/CompletionTrendChart'; import { CompletionTrendChart } from '@/components/charts/CompletionTrendChart';
import { VelocityChart } from '@/components/charts/VelocityChart'; import { VelocityChart } from '@/components/charts/VelocityChart';

View File

@@ -1,7 +1,7 @@
'use client'; 'use client';
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts'; 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'; import { parseDate, formatDateShort } from '@/lib/date-utils';
interface CompletionRateChartProps { interface CompletionRateChartProps {

View File

@@ -1,7 +1,7 @@
'use client'; 'use client';
import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, Legend } from 'recharts'; 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'; import { parseDate, formatDateShort } from '@/lib/date-utils';
interface DailyStatusChartProps { interface DailyStatusChartProps {

View File

@@ -1,6 +1,6 @@
'use client'; 'use client';
import { DailyMetrics } from '@/services/metrics'; import { DailyMetrics } from '@/services/analytics/metrics';
interface ProductivityInsightsProps { interface ProductivityInsightsProps {
data: DailyMetrics[]; data: DailyMetrics[];

View File

@@ -1,7 +1,7 @@
'use client'; 'use client';
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, Legend } from 'recharts'; import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, Legend } from 'recharts';
import { VelocityTrend } from '@/services/metrics'; import { VelocityTrend } from '@/services/analytics/metrics';
interface VelocityTrendChartProps { interface VelocityTrendChartProps {
data: VelocityTrend[]; data: VelocityTrend[];

View File

@@ -1,6 +1,6 @@
'use client'; 'use client';
import { DailyMetrics } from '@/services/metrics'; import { DailyMetrics } from '@/services/analytics/metrics';
import { parseDate, isToday } from '@/lib/date-utils'; import { parseDate, isToday } from '@/lib/date-utils';
interface WeeklyActivityHeatmapProps { interface WeeklyActivityHeatmapProps {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -2,7 +2,7 @@
import { useState, useEffect } from 'react'; import { useState, useEffect } from 'react';
import { backupClient, BackupListResponse } from '@/clients/backup-client'; 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 { Button } from '@/components/ui/Button';
import { Card, CardHeader, CardContent } from '@/components/ui/Card'; import { Card, CardHeader, CardContent } from '@/components/ui/Card';
import { Input } from '@/components/ui/Input'; import { Input } from '@/components/ui/Input';

View File

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

View File

@@ -6,7 +6,7 @@ import { useState, useEffect, useTransition } from 'react';
import { backupClient } from '@/clients/backup-client'; import { backupClient } from '@/clients/backup-client';
import { jiraClient } from '@/clients/jira-client'; import { jiraClient } from '@/clients/jira-client';
import { getSystemInfo } from '@/actions/system-info'; 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 { QuickStats } from './index/QuickStats';
import { SettingsNavigation } from './index/SettingsNavigation'; import { SettingsNavigation } from './index/SettingsNavigation';
import { QuickActions } from './index/QuickActions'; import { QuickActions } from './index/QuickActions';

View File

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

View File

@@ -2,7 +2,7 @@
import { Card, CardContent } from '@/components/ui/Card'; import { Card, CardContent } from '@/components/ui/Card';
import { UserPreferences } from '@/lib/types'; import { UserPreferences } from '@/lib/types';
import { SystemInfo } from '@/services/system-info'; import { SystemInfo } from '@/services/core/system-info';
interface QuickStatsProps { interface QuickStatsProps {
preferences: UserPreferences; preferences: UserPreferences;

View File

@@ -1,7 +1,7 @@
'use client'; 'use client';
import { Card, CardHeader, CardContent } from '@/components/ui/Card'; 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 { interface SystemInfoProps {
systemInfo: SystemInfoType | null; systemInfo: SystemInfoType | null;

View File

@@ -1,6 +1,6 @@
import { useState, useEffect, useTransition, useCallback } from 'react'; import { useState, useEffect, useTransition, useCallback } from 'react';
import { getWeeklyMetrics, getVelocityTrends } from '@/actions/metrics'; 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 des types pour les composants
export type WeeklyMetrics = WeeklyMetricsOverview; export type WeeklyMetrics = WeeklyMetricsOverview;

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
import { Task, TaskStatus, TaskPriority, TaskSource } from '@/lib/types'; 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'; import { getToday, parseDate, subtractDays } from '@/lib/date-utils';
export interface ProductivityMetrics { export interface ProductivityMetrics {

View File

@@ -1,4 +1,4 @@
import { prisma } from './database'; import { prisma } from '@/services/core/database';
import { startOfWeek, endOfWeek } from 'date-fns'; import { startOfWeek, endOfWeek } from 'date-fns';
import { getToday } from '@/lib/date-utils'; import { getToday } from '@/lib/date-utils';

View File

@@ -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 { startOfWeek, endOfWeek, eachDayOfInterval, format, startOfDay, endOfDay } from 'date-fns';
import { fr } from 'date-fns/locale'; import { fr } from 'date-fns/locale';
import { formatDateForAPI, getDayName, getToday, subtractDays } from '@/lib/date-utils'; import { formatDateForAPI, getDayName, getToday, subtractDays } from '@/lib/date-utils';

View File

@@ -125,7 +125,7 @@ export class SystemInfoService {
private static async getBackupCount(): Promise<number> { private static async getBackupCount(): Promise<number> {
try { try {
// Import dynamique pour éviter les dépendances circulaires // 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(); const backups = await backupService.listBackups();
return backups.length; return backups.length;
} catch (error) { } catch (error) {

View File

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

View File

@@ -1,8 +1,8 @@
import { promises as fs } from 'fs'; import { promises as fs } from 'fs';
import path from 'path'; import path from 'path';
import { prisma } from './database'; import { prisma } from '@/services/core/database';
import { userPreferencesService } from './user-preferences'; import { userPreferencesService } from '@/services/core/user-preferences';
import { BackupUtils } from '../lib/backup-utils'; import { BackupUtils } from '@/lib/backup-utils';
import { getToday } from '@/lib/date-utils'; import { getToday } from '@/lib/date-utils';
export interface BackupConfig { export interface BackupConfig {

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
import { userPreferencesService } from './user-preferences'; import { userPreferencesService } from '@/services/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';

View File

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

View File

@@ -1,4 +1,4 @@
import { prisma } from './database'; import { prisma } from '@/services/core/database';
import { Prisma } from '@prisma/client'; import { Prisma } from '@prisma/client';
import { DailyCheckbox, DailyView, CreateDailyCheckboxData, UpdateDailyCheckboxData, BusinessError, DailyCheckboxType, TaskStatus, TaskPriority, TaskSource } from '@/lib/types'; import { DailyCheckbox, DailyView, CreateDailyCheckboxData, UpdateDailyCheckboxData, BusinessError, DailyCheckboxType, TaskStatus, TaskPriority, TaskSource } from '@/lib/types';
import { getPreviousWorkday, normalizeDate, formatDateForAPI, getToday, getYesterday } from '@/lib/date-utils'; import { getPreviousWorkday, normalizeDate, formatDateForAPI, getToday, getYesterday } from '@/lib/date-utils';

View File

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

View File

@@ -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 { Task, TaskStatus, TaskPriority, TaskSource, BusinessError, DailyCheckbox, DailyCheckboxType } from '@/lib/types';
import { Prisma } from '@prisma/client'; import { Prisma } from '@prisma/client';
import { getToday } from '@/lib/date-utils'; import { getToday } from '@/lib/date-utils';