Files
towercontrol/lib/types.ts
Julien Froidefond a98bde86d3 feat: implement project ignore list for Jira synchronization
- Updated `JiraConfigForm` to include an input for ignored projects, allowing users to specify projects to exclude from synchronization.
- Enhanced `JiraService` with a method to filter out tasks from ignored projects, improving task management.
- Modified user preferences to store ignored projects, ensuring persistence across sessions.
- Updated API routes to handle ignored projects in configuration, enhancing overall functionality.
- Marked the corresponding task as complete in TODO.md.
2025-09-18 13:29:15 +02:00

257 lines
5.6 KiB
TypeScript

// 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
export type TaskStatus = 'backlog' | 'todo' | 'in_progress' | 'done' | 'cancelled' | 'freeze' | 'archived';
export type TaskPriority = 'low' | 'medium' | 'high' | 'urgent';
export type TaskSource = 'reminders' | 'jira' | 'manual';
// Interface centralisée pour les statistiques
export interface TaskStats {
total: number;
completed: number;
inProgress: number;
todo: number;
backlog: number;
cancelled: number;
freeze: number;
archived: number;
completionRate: number;
}
// 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;
jiraType?: string; // Type de ticket Jira: Story, Task, Bug, Epic, etc.
assignee?: string;
}
// Interface pour les tags
export interface Tag {
id: string;
name: string;
color: string;
isPinned?: boolean; // Tag pour objectifs principaux
}
// Types pour les préférences utilisateur
export interface KanbanFilters {
search?: string;
tags?: string[];
priorities?: TaskPriority[];
showCompleted?: boolean;
sortBy?: string;
// Filtres spécifiques Jira
showJiraOnly?: boolean;
hideJiraTasks?: boolean;
jiraProjects?: string[];
jiraTypes?: string[];
[key: string]: string | string[] | TaskPriority[] | boolean | undefined;
}
export interface ViewPreferences {
compactView: boolean;
swimlanesByTags: boolean;
swimlanesMode?: 'tags' | 'priority';
showObjectives: boolean;
showFilters: boolean;
objectivesCollapsed: boolean;
theme: 'light' | 'dark';
fontSize: 'small' | 'medium' | 'large';
[key: string]: boolean | 'tags' | 'priority' | 'light' | 'dark' | 'small' | 'medium' | 'large' | undefined;
}
export interface ColumnVisibility {
hiddenStatuses: TaskStatus[];
[key: string]: TaskStatus[] | undefined;
}
export interface JiraConfig {
baseUrl?: string;
email?: string;
apiToken?: string;
enabled: boolean;
ignoredProjects?: string[]; // Liste des clés de projets à ignorer (ex: ["DEMO", "TEST"])
}
export interface UserPreferences {
kanbanFilters: KanbanFilters;
viewPreferences: ViewPreferences;
columnVisibility: ColumnVisibility;
jiraConfig: JiraConfig;
}
// 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;
};
issuetype: {
name: string; // Story, Task, Bug, Epic, etc.
};
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';
}
}
// Types pour les dailies
export type DailyCheckboxType = 'task' | 'meeting';
export interface DailyCheckbox {
id: string;
date: Date;
text: string;
isChecked: boolean;
type: DailyCheckboxType;
order: number;
taskId?: string;
task?: Task; // Relation optionnelle vers une tâche
createdAt: Date;
updatedAt: Date;
}
// Interface pour créer/modifier une checkbox
export interface CreateDailyCheckboxData {
date: Date;
text: string;
type?: DailyCheckboxType;
taskId?: string;
order?: number;
isChecked?: boolean;
}
export interface UpdateDailyCheckboxData {
text?: string;
isChecked?: boolean;
type?: DailyCheckboxType;
taskId?: string;
order?: number;
}
// Interface pour récupérer les checkboxes d'une journée
export interface DailyView {
date: Date;
yesterday: DailyCheckbox[]; // Checkboxes de la veille
today: DailyCheckbox[]; // Checkboxes du jour
}