Add complete Biblical Guide web application with Material UI
Implemented comprehensive Romanian Biblical Guide web app: - Next.js 15 with App Router and TypeScript - Material UI 7.3.2 for modern, responsive design - PostgreSQL database with Prisma ORM - Complete Bible reader with book/chapter navigation - AI-powered biblical chat with Romanian responses - Prayer wall for community prayer requests - Advanced Bible search with filters and highlighting - Sample Bible data imported from API.Bible - All API endpoints created and working - Professional Material UI components throughout - Responsive layout with navigation and theme 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
172
prisma/schema.prisma
Normal file
172
prisma/schema.prisma
Normal file
@@ -0,0 +1,172 @@
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
model User {
|
||||
id String @id @default(uuid())
|
||||
email String @unique
|
||||
passwordHash String
|
||||
name String?
|
||||
theme String @default("light")
|
||||
fontSize String @default("medium")
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
lastLoginAt DateTime?
|
||||
|
||||
sessions Session[]
|
||||
bookmarks Bookmark[]
|
||||
notes Note[]
|
||||
chatMessages ChatMessage[]
|
||||
prayerRequests PrayerRequest[]
|
||||
readingHistory ReadingHistory[]
|
||||
preferences UserPreference[]
|
||||
}
|
||||
|
||||
model Session {
|
||||
id String @id @default(uuid())
|
||||
userId String
|
||||
token String @unique
|
||||
expiresAt DateTime
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([userId])
|
||||
@@index([token])
|
||||
}
|
||||
|
||||
model BibleBook {
|
||||
id Int @id
|
||||
name String
|
||||
testament String
|
||||
orderNum Int
|
||||
chapters BibleChapter[]
|
||||
|
||||
@@index([testament])
|
||||
}
|
||||
|
||||
model BibleChapter {
|
||||
id String @id @default(uuid())
|
||||
bookId Int
|
||||
chapterNum Int
|
||||
verses BibleVerse[]
|
||||
|
||||
book BibleBook @relation(fields: [bookId], references: [id])
|
||||
|
||||
@@unique([bookId, chapterNum])
|
||||
@@index([bookId])
|
||||
}
|
||||
|
||||
model BibleVerse {
|
||||
id String @id @default(uuid())
|
||||
chapterId String
|
||||
verseNum Int
|
||||
text String @db.Text
|
||||
version String @default("KJV")
|
||||
|
||||
chapter BibleChapter @relation(fields: [chapterId], references: [id])
|
||||
bookmarks Bookmark[]
|
||||
notes Note[]
|
||||
|
||||
@@unique([chapterId, verseNum, version])
|
||||
@@index([chapterId])
|
||||
@@index([version])
|
||||
}
|
||||
|
||||
model ChatMessage {
|
||||
id String @id @default(uuid())
|
||||
userId String
|
||||
role String // 'user' or 'assistant'
|
||||
content String @db.Text
|
||||
metadata Json? // Store verse references, etc.
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([userId, createdAt])
|
||||
}
|
||||
|
||||
model Bookmark {
|
||||
id String @id @default(uuid())
|
||||
userId String
|
||||
verseId String
|
||||
note String?
|
||||
color String @default("#FFD700")
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
verse BibleVerse @relation(fields: [verseId], references: [id])
|
||||
|
||||
@@unique([userId, verseId])
|
||||
@@index([userId])
|
||||
}
|
||||
|
||||
model Note {
|
||||
id String @id @default(uuid())
|
||||
userId String
|
||||
verseId String
|
||||
content String @db.Text
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
verse BibleVerse @relation(fields: [verseId], references: [id])
|
||||
|
||||
@@index([userId])
|
||||
@@index([verseId])
|
||||
}
|
||||
|
||||
model PrayerRequest {
|
||||
id String @id @default(uuid())
|
||||
userId String?
|
||||
content String @db.Text
|
||||
isAnonymous Boolean @default(true)
|
||||
prayerCount Int @default(0)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
user User? @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
prayers Prayer[]
|
||||
|
||||
@@index([createdAt])
|
||||
}
|
||||
|
||||
model Prayer {
|
||||
id String @id @default(uuid())
|
||||
requestId String
|
||||
ipAddress String // For anonymous prayer counting
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
request PrayerRequest @relation(fields: [requestId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@unique([requestId, ipAddress])
|
||||
}
|
||||
|
||||
model ReadingHistory {
|
||||
id String @id @default(uuid())
|
||||
userId String
|
||||
bookId Int
|
||||
chapterNum Int
|
||||
verseNum Int?
|
||||
viewedAt DateTime @default(now())
|
||||
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([userId, viewedAt])
|
||||
}
|
||||
|
||||
model UserPreference {
|
||||
id String @id @default(uuid())
|
||||
userId String
|
||||
key String
|
||||
value String
|
||||
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@unique([userId, key])
|
||||
}
|
||||
Reference in New Issue
Block a user