classDiagram class User { -ID: int64 -Username: string -Password: string -Language: string -Theme: string } class Category { -ID: int64 -Title: string -UserID: int64 } class Feed { -ID: int64 -Title: string -FeedURL: string -SiteURL: string -LastPolledAt: time +Refresh() error } class Entry { -ID: int64 -Title: string -Content: string -Starred: bool -Read: bool } class Storage { -db: *sql.DB +GetUser() User +SaveEntries() error } class WorkerPool { -jobs: chan Job +Push(job) } class FeedRefreshHandler { +RefreshFeed(store, userID, feedID) error } class ApiHandler { -store: Storage -pool: WorkerPool }
User "1" -- "0..*" Category
Category "1" -- "0..*" Feed
Feed "1" -- "0..*" Entry
ApiHandler --> Storage
ApiHandler --> WorkerPool
WorkerPool --> FeedRefreshHandler
FeedRefreshHandler --> Storage