- Initialize Git repository with main branch - Create comprehensive .gitignore for Node.js, React, and environment files - Set up directory structure (frontend/, backend/, docs/) - Create detailed README.md with project overview and setup instructions - Add .env.example with all required environment variables - Configure Prettier for consistent code formatting All acceptance criteria met: ✅ Git repository initialized with appropriate .gitignore ✅ Directory structure matches Technical Assumptions ✅ README.md created with project overview and setup docs ✅ .env.example file with all required environment variables ✅ Prettier config files added for code formatting consistency 🤖 Generated with Claude Code (https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
91 lines
2.7 KiB
Markdown
91 lines
2.7 KiB
Markdown
# Core Workflows
|
|
|
|
## Add Book Workflow
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
actor User
|
|
participant UI as Add Book Screen
|
|
participant API as Express API
|
|
participant OL as Open Library API
|
|
participant DB as PostgreSQL
|
|
|
|
User->>UI: Enter search query
|
|
UI->>API: GET /api/books/search?q=query
|
|
API->>OL: GET /search.json?q=query
|
|
OL-->>API: Book search results (JSON)
|
|
API-->>UI: Formatted search results
|
|
UI->>User: Display book results
|
|
|
|
User->>UI: Select book
|
|
User->>UI: Set deadline date
|
|
UI->>API: POST /api/books {title, author, pages, deadline}
|
|
API->>API: Validate input
|
|
API->>DB: INSERT INTO books
|
|
DB-->>API: Created book with ID
|
|
API-->>UI: 201 Created {book}
|
|
UI->>User: Navigate to Book List
|
|
UI->>User: Show success message
|
|
```
|
|
|
|
## Log Progress Workflow
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
actor User
|
|
participant UI as Log Progress Modal
|
|
participant API as Express API
|
|
participant DB as PostgreSQL
|
|
|
|
User->>UI: Tap book card
|
|
UI->>User: Open modal
|
|
User->>UI: Enter page number
|
|
UI->>API: POST /api/books/:id/logs {currentPage, logDate}
|
|
API->>API: Validate input (page > 0, <= totalPages, >= lastPage)
|
|
API->>DB: INSERT or UPDATE reading_logs
|
|
DB-->>API: Created/updated log
|
|
API-->>UI: 201/200 {log}
|
|
UI->>UI: Close modal
|
|
UI->>API: GET /api/books (refresh list)
|
|
API->>DB: SELECT books with progress calculations
|
|
DB-->>API: Books with latest logs
|
|
API-->>UI: Books with updated progress
|
|
UI->>User: Show updated status (green/yellow/red)
|
|
```
|
|
|
|
## Calculate Progress Workflow
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
participant API as Books Controller
|
|
participant PS as Pace Service
|
|
participant DB as Prisma Client
|
|
|
|
API->>DB: Get book by ID
|
|
DB-->>API: Book {totalPages, deadlineDate}
|
|
API->>DB: Get latest log for book
|
|
DB-->>API: ReadingLog {currentPage, logDate}
|
|
|
|
API->>PS: calculateRequiredPace(totalPages, currentPage, deadlineDate)
|
|
PS->>PS: pagesRemaining = totalPages - currentPage
|
|
PS->>PS: daysRemaining = deadlineDate - today
|
|
PS->>PS: requiredPace = pagesRemaining / daysRemaining
|
|
PS-->>API: requiredPace (number)
|
|
|
|
API->>PS: calculateActualPace(bookId, 7 days)
|
|
PS->>DB: Get logs from last 7 days
|
|
DB-->>PS: ReadingLog[] (last 7 days)
|
|
PS->>PS: actualPace = (latestPage - page7DaysAgo) / 7
|
|
PS-->>API: actualPace (number or null)
|
|
|
|
API->>PS: calculateStatus(requiredPace, actualPace)
|
|
PS->>PS: if actualPace >= requiredPace: "on-track"
|
|
PS->>PS: else if actualPace >= requiredPace * 0.9: "slightly-behind"
|
|
PS->>PS: else: "behind"
|
|
PS-->>API: status (string)
|
|
|
|
API-->>Client: ProgressCalculation {pagesRemaining, daysRemaining, requiredPace, actualPace, status}
|
|
```
|
|
|
|
---
|