feat(Notes): add folder management to notes, allowing notes to be categorized into folders, and update related components for folder selection and display
This commit is contained in:
84
src/clients/folders-client.ts
Normal file
84
src/clients/folders-client.ts
Normal file
@@ -0,0 +1,84 @@
|
||||
import { HttpClient } from '@/clients/base/http-client';
|
||||
import { Folder } from '@/services/folders';
|
||||
|
||||
export interface CreateFolderData {
|
||||
name: string;
|
||||
tagId?: string;
|
||||
parentId?: string;
|
||||
order?: number;
|
||||
}
|
||||
|
||||
export interface UpdateFolderData {
|
||||
name?: string;
|
||||
tagId?: string;
|
||||
parentId?: string;
|
||||
order?: number;
|
||||
}
|
||||
|
||||
export interface FoldersResponse {
|
||||
folders: Folder[];
|
||||
}
|
||||
|
||||
export interface FolderResponse {
|
||||
folder: Folder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Client HTTP pour les dossiers
|
||||
*/
|
||||
export class FoldersClient extends HttpClient {
|
||||
constructor() {
|
||||
super('/api/folders');
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupère tous les dossiers de l'utilisateur
|
||||
*/
|
||||
async getFolders(): Promise<Folder[]> {
|
||||
const response = await this.get<FoldersResponse>('');
|
||||
return response.folders;
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupère un dossier par son ID
|
||||
*/
|
||||
async getFolderById(id: string): Promise<Folder> {
|
||||
const response = await this.get<FolderResponse>(`/${id}`);
|
||||
return response.folder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Crée un nouveau dossier
|
||||
*/
|
||||
async createFolder(data: CreateFolderData): Promise<Folder> {
|
||||
const response = await this.post<FolderResponse>('', data);
|
||||
return response.folder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Met à jour un dossier existant
|
||||
*/
|
||||
async updateFolder(id: string, data: UpdateFolderData): Promise<Folder> {
|
||||
const response = await this.put<FolderResponse>(`/${id}`, data);
|
||||
return response.folder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Supprime un dossier
|
||||
*/
|
||||
async deleteFolder(id: string): Promise<void> {
|
||||
await this.delete(`/${id}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Réorganise l'ordre des dossiers
|
||||
*/
|
||||
async reorderFolders(
|
||||
folderOrders: Array<{ id: string; order: number }>
|
||||
): Promise<void> {
|
||||
await this.post('/reorder', { folderOrders });
|
||||
}
|
||||
}
|
||||
|
||||
// Instance singleton
|
||||
export const foldersClient = new FoldersClient();
|
||||
@@ -5,6 +5,7 @@ export interface CreateNoteData {
|
||||
title: string;
|
||||
content: string;
|
||||
taskId?: string; // Tâche associée à la note
|
||||
folderId?: string; // Dossier contenant la note
|
||||
tags?: string[];
|
||||
}
|
||||
|
||||
@@ -12,6 +13,7 @@ export interface UpdateNoteData {
|
||||
title?: string;
|
||||
content?: string;
|
||||
taskId?: string; // Tâche associée à la note
|
||||
folderId?: string | null; // Dossier contenant la note (null pour retirer du dossier)
|
||||
tags?: string[];
|
||||
}
|
||||
|
||||
@@ -66,7 +68,14 @@ export class NotesClient extends HttpClient {
|
||||
* Met à jour une note existante
|
||||
*/
|
||||
async updateNote(id: string, data: UpdateNoteData): Promise<Note> {
|
||||
console.log(
|
||||
'[notesClient.updateNote] Updating note:',
|
||||
id,
|
||||
'with data:',
|
||||
data
|
||||
);
|
||||
const response = await this.put<NoteResponse>(`/${id}`, data);
|
||||
console.log('[notesClient.updateNote] Response:', response);
|
||||
return response.note;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user