generator client { provider = "prisma-client-js" } datasource db { provider = "sqlite" url = env("DATABASE_URL") } model Note { id String @id @default(cuid()) title String content String type String @default("note") isFavorite Boolean @default(false) isPinned Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt creationSource String @default("form") // 'form' | 'quick' | 'import' tags NoteTag[] backlinks Backlink[] @relation("BacklinkTarget") outbound Backlink[] @relation("BacklinkSource") usageEvents NoteUsage[] coUsageFrom NoteCoUsage[] @relation("CoUsageFrom") coUsageTo NoteCoUsage[] @relation("CoUsageTo") } model Tag { id String @id @default(cuid()) name String @unique notes NoteTag[] } model NoteTag { noteId String tagId String note Note @relation(fields: [noteId], references: [id], onDelete: Cascade) tag Tag @relation(fields: [tagId], references: [id], onDelete: Cascade) @@id([noteId, tagId]) } model Backlink { id String @id @default(cuid()) sourceNoteId String targetNoteId String sourceNote Note @relation("BacklinkSource", fields: [sourceNoteId], references: [id], onDelete: Cascade) targetNote Note @relation("BacklinkTarget", fields: [targetNoteId], references: [id], onDelete: Cascade) createdAt DateTime @default(now()) @@unique([sourceNoteId, targetNoteId]) } model NoteUsage { id String @id @default(cuid()) noteId String note Note @relation(fields: [noteId], references: [id], onDelete: Cascade) eventType String // 'view' | 'search_click' | 'related_click' | 'link_click' query String? metadata String? createdAt DateTime @default(now()) @@index([noteId, createdAt]) @@index([eventType, createdAt]) } model NoteCoUsage { id String @id @default(cuid()) fromNoteId String fromNote Note @relation("CoUsageFrom", fields: [fromNoteId], references: [id], onDelete: Cascade) toNoteId String toNote Note @relation("CoUsageTo", fields: [toNoteId], references: [id], onDelete: Cascade) weight Int @default(1) // times viewed together createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@unique([fromNoteId, toNoteId]) @@index([fromNoteId]) @@index([toNoteId]) } model NoteVersion { id String @id @default(cuid()) noteId String title String content String createdAt DateTime @default(now()) @@index([noteId, createdAt]) }