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:
Julien Froidefond
2026-01-06 09:05:27 +01:00
parent 7ce8057c6b
commit 6c4c6992a9
15 changed files with 1314 additions and 21 deletions

0
prisma/data/dev.db Normal file
View File

View File

@@ -0,0 +1,23 @@
-- CreateTable
CREATE TABLE "folders" (
"id" TEXT NOT NULL PRIMARY KEY,
"name" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"tagId" TEXT,
"parentId" TEXT,
"order" INTEGER NOT NULL DEFAULT 0,
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" DATETIME NOT NULL,
CONSTRAINT "folders_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT "folders_tagId_fkey" FOREIGN KEY ("tagId") REFERENCES "tags" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT "folders_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "folders" ("id") ON DELETE CASCADE ON UPDATE CASCADE
);
-- AlterTable Note - Add folderId column
ALTER TABLE "Note" ADD COLUMN "folderId" TEXT;
-- CreateIndex
CREATE INDEX "folders_userId_idx" ON "folders"("userId");
CREATE INDEX "folders_parentId_idx" ON "folders"("parentId");

BIN
prisma/prisma/dev.db Normal file

Binary file not shown.

View File

@@ -25,6 +25,7 @@ model User {
dailyCheckboxes DailyCheckbox[]
tasks Task[] @relation("TaskOwner")
tags Tag[] @relation("TagOwner")
folders Folder[] @relation("FolderOwner")
@@map("users")
}
@@ -72,6 +73,7 @@ model Tag {
taskTags TaskTag[]
primaryTasks Task[] @relation("PrimaryTag")
noteTags NoteTag[]
folders Folder[]
@@unique([name, ownerId]) // Un nom de tag unique par utilisateur
@@map("tags")
@@ -142,13 +144,33 @@ model Note {
content String // Markdown content
userId String
taskId String? // Tâche associée à la note
folderId String? // Dossier contenant la note
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
task Task? @relation(fields: [taskId], references: [id])
folder Folder? @relation(fields: [folderId], references: [id])
noteTags NoteTag[]
}
model Folder {
id String @id @default(cuid())
name String
userId String
tagId String? // Tag associé au dossier
parentId String? // Dossier parent pour sous-dossiers
order Int @default(0)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation("FolderOwner", fields: [userId], references: [id], onDelete: Cascade)
tag Tag? @relation(fields: [tagId], references: [id])
parent Folder? @relation("FolderHierarchy", fields: [parentId], references: [id], onDelete: Cascade)
children Folder[] @relation("FolderHierarchy")
notes Note[]
@@map("folders")
}
model NoteTag {
noteId String
tagId String