- Automatic browser geolocation capture on event creation - Reverse geocoding via Nominatim API for place names - Full-text search with SQLite FTS5 - Calendar view for browsing past entries - DateNavigator component for day navigation - SearchModal with Ctrl+K shortcut - QuickAddWidget with Ctrl+J shortcut - Starlight documentation site with GitHub Pages deployment - Multiple AI provider support (Groq, OpenAI, Anthropic, Ollama, LM Studio) - Multi-user registration support BREAKING: Events now include latitude/longitude/placeName fields
110 lines
2.5 KiB
Plaintext
110 lines
2.5 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "sqlite"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model User {
|
|
id String @id @default(uuid())
|
|
email String @unique
|
|
passwordHash String
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
apiKeys ApiKey[]
|
|
events Event[]
|
|
journals Journal[]
|
|
tasks Task[]
|
|
settings Settings?
|
|
}
|
|
|
|
model ApiKey {
|
|
id String @id @default(uuid())
|
|
userId String
|
|
keyHash String @unique
|
|
name String
|
|
lastUsedAt DateTime?
|
|
createdAt DateTime @default(now())
|
|
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([userId])
|
|
}
|
|
|
|
model Event {
|
|
id String @id @default(uuid())
|
|
userId String
|
|
date String
|
|
type String
|
|
content String
|
|
mediaPath String?
|
|
metadata String?
|
|
latitude Float?
|
|
longitude Float?
|
|
placeName String?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([userId, date])
|
|
@@index([date])
|
|
}
|
|
|
|
model Journal {
|
|
id String @id @default(uuid())
|
|
userId String
|
|
date String
|
|
title String?
|
|
content String
|
|
eventCount Int
|
|
generatedAt DateTime @default(now())
|
|
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
tasks Task[]
|
|
|
|
@@unique([userId, date])
|
|
@@index([userId])
|
|
}
|
|
|
|
model Task {
|
|
id String @id @default(uuid())
|
|
userId String
|
|
journalId String
|
|
type String @default("journal_generate")
|
|
status String @default("pending")
|
|
provider String
|
|
model String?
|
|
prompt String
|
|
request String?
|
|
response String?
|
|
error String?
|
|
title String?
|
|
createdAt DateTime @default(now())
|
|
completedAt DateTime?
|
|
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
journal Journal @relation(fields: [journalId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([userId])
|
|
@@index([journalId])
|
|
}
|
|
|
|
model Settings {
|
|
userId String @id
|
|
aiProvider String @default("groq")
|
|
aiApiKey String?
|
|
aiModel String @default("llama-3.3-70b-versatile")
|
|
aiBaseUrl String?
|
|
journalPrompt String?
|
|
language String @default("en")
|
|
timezone String @default("UTC")
|
|
providerSettings String?
|
|
journalContextDays Int @default(10)
|
|
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
}
|