- Installed Prisma and @prisma/client in backend/ directory - Initialized Prisma with PostgreSQL provider (Prisma 7.x) - Created prisma/schema.prisma with Book and ReadingLog models - Configured prisma.config.ts with DATABASE_URL from environment - Added .gitignore for Prisma-generated files Book model includes: - All required fields (id, title, author, totalPages, coverUrl, deadlineDate, isPrimary, status) - Timestamps (createdAt, updatedAt) - Indexes on deadlineDate and status for query performance - One-to-many relationship with ReadingLog ReadingLog model includes: - All required fields (id, bookId, logDate, currentPage) - Timestamps (createdAt, updatedAt) - Foreign key relationship to Book with cascade delete - Unique constraint on (bookId, logDate) - one entry per book per day - Indexes on bookId and logDate for query performance All acceptance criteria met: ✅ Prisma installed in backend/ ✅ Initialized with PostgreSQL provider ✅ schema.prisma defines Book and ReadingLog models ✅ Appropriate indexes for performance ✅ One-to-many relationship defined ✅ Unique constraint ensures one log entry per book per day Schema validated with npx prisma format 🤖 Generated with Claude Code (https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
44 lines
1.0 KiB
Plaintext
44 lines
1.0 KiB
Plaintext
// This is your Prisma schema file,
|
|
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
|
|
|
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
}
|
|
|
|
model Book {
|
|
id Int @id @default(autoincrement())
|
|
title String @db.VarChar(500)
|
|
author String? @db.VarChar(500)
|
|
totalPages Int
|
|
coverUrl String? @db.VarChar(1000)
|
|
deadlineDate DateTime @db.Date
|
|
isPrimary Boolean @default(false)
|
|
status String @default("reading") @db.VarChar(50)
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
readingLogs ReadingLog[]
|
|
|
|
@@index([deadlineDate])
|
|
@@index([status])
|
|
}
|
|
|
|
model ReadingLog {
|
|
id Int @id @default(autoincrement())
|
|
bookId Int
|
|
logDate DateTime @db.Date
|
|
currentPage Int
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
book Book @relation(fields: [bookId], references: [id], onDelete: Cascade)
|
|
|
|
@@unique([bookId, logDate])
|
|
@@index([bookId])
|
|
@@index([logDate])
|
|
}
|