Journal
=======


Data Model
----------
```mermaid
classDiagram
User .. Piece

class Piece {
    +User owner
    +int visibility
}

class Item {
    +str title
    +str brief
    -enum type
}
Piece <|-- Content
Item .. Content
class Content {
    +Item target
}
Content <|-- Rating
class Rating {
    +int grade
}
Content <|-- Review
class Review {
    +str title
    +str body
}
Content <|-- Comment
class Comment {
    +str text
}
Content <|-- Note
class Note {
    +str title
    +str content
    +enum progress_type
    +str progress_value

}
Content <|-- Reply
class Reply {
    +Content reply_to
}
Piece <|-- List
class List{
    +ListItem[] items
}
Item .. ListItem
List *-- ListItem
class ListItem {
    +int position
    +Item item
    +Dict metadata
}
List <|-- Collection
Item .. Collection
class Collection {
    +str title
    +str brief
    +Bool collabrative
}
List <|-- Tag
class Tag {
    +str title
}
List <|-- Shelf
class Shelf {
    +Enum type
}
User .. ShelfLogManager
class ShelfLogManager {
    +User owner
    +ShelfLogEntry[] logs
}
ShelfLogManager *-- ShelfLogEntry
class ShelfLogEntry {
    +Item item
    +Shelf shelf
    +DateTime timestamp
}
ShelfLogEntry .. Item
ShelfLogEntry .. Shelf

Shelf *-- ShelfItem
ListItem <|-- ShelfItem

ListItem <|-- TagItem
ListItem <|-- CollectionItem

Tag *-- TagItem
Collection *-- CollectionItem
```
