Files
towercontrol/lib/types.ts
Julien Froidefond e6d24f2693 feat: extend task management with new statuses and centralized configuration
- Added `cancelled` and `freeze` statuses to `TasksResponse`, `HomePageClientProps`, and `useTasks` for comprehensive task tracking.
- Updated task forms to dynamically load statuses using `getAllStatuses`, enhancing maintainability and reducing hardcoded values.
- Refactored Kanban components to utilize centralized status configuration, improving consistency across the application.
- Adjusted visibility toggle and swimlanes to reflect new status options, ensuring a seamless user experience.
2025-09-14 23:06:50 +02:00

152 lines
3.0 KiB
TypeScript

// Types de base pour les tâches
// Note: TaskStatus est maintenant géré par la configuration centralisée dans lib/status-config.ts
export type TaskStatus = 'todo' | 'in_progress' | 'done' | 'cancelled' | 'freeze';
export type TaskPriority = 'low' | 'medium' | 'high' | 'urgent';
export type TaskSource = 'reminders' | 'jira' | 'manual';
// Interface principale pour les tâches
export interface Task {
id: string;
title: string;
description?: string;
status: TaskStatus;
priority: TaskPriority;
source: TaskSource;
sourceId?: string;
tags: string[];
dueDate?: Date;
completedAt?: Date;
createdAt: Date;
updatedAt: Date;
// Métadonnées Jira
jiraProject?: string;
jiraKey?: string;
assignee?: string;
}
// Interface pour les tags
export interface Tag {
id: string;
name: string;
color: string;
isPinned?: boolean; // Tag pour objectifs principaux
}
// Interface pour les logs de synchronisation
export interface SyncLog {
id: string;
source: TaskSource;
status: 'success' | 'error';
message?: string;
tasksSync: number;
createdAt: Date;
}
// Types pour les rappels macOS
export interface MacOSReminder {
id: string;
title: string;
notes?: string;
completed: boolean;
dueDate?: Date;
completionDate?: Date;
priority: number; // 0=None, 1=Low, 5=Medium, 9=High
list: string;
tags?: string[];
}
// Types pour Jira
export interface JiraTask {
id: string;
key: string;
summary: string;
description?: string;
status: {
name: string;
category: string;
};
priority?: {
name: string;
};
assignee?: {
displayName: string;
emailAddress: string;
};
project: {
key: string;
name: string;
};
duedate?: string;
created: string;
updated: string;
labels: string[];
}
// Types pour l'API
export interface ApiResponse<T> {
data?: T;
error?: string;
message?: string;
}
export interface PaginatedResponse<T> {
data: T[];
total: number;
page: number;
limit: number;
}
// Types pour les filtres
export interface TaskFilters {
status?: TaskStatus[];
priority?: TaskPriority[];
source?: TaskSource[];
tags?: string[];
assignee?: string;
search?: string;
dueDate?: {
from?: Date;
to?: Date;
};
}
// Types pour les statistiques d'équipe
export interface TeamStats {
totalTasks: number;
completedTasks: number;
inProgressTasks: number;
velocity: number;
burndownData: BurndownPoint[];
memberStats: MemberStats[];
}
export interface BurndownPoint {
date: Date;
remaining: number;
completed: number;
}
export interface MemberStats {
name: string;
email: string;
totalTasks: number;
completedTasks: number;
averageCompletionTime: number;
}
// Types d'erreur
export class BusinessError extends Error {
constructor(message: string, public code?: string) {
super(message);
this.name = 'BusinessError';
}
}
export class ValidationError extends Error {
constructor(message: string, public field?: string) {
super(message);
this.name = 'ValidationError';
}
}