package model import "time" // User represents a user in PostgreSQL. type User struct { ID string `json:"id"` Email string `json:"email"` Name string `json:"name"` Avatar *string `json:"avatar,omitempty"` Role string `json:"role"` // "user" | "admin" | "moderator" CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } // Bookmark represents a user's bookmarked content. type Bookmark struct { ID string `json:"id"` UserID string `json:"user_id"` ContentType string `json:"content_type"` // "verse" | "letter" | "essay" | "transcription" | etc. ContentID string `json:"content_id"` ContentRef string `json:"content_ref"` // human-readable reference (e.g., "BG 1.1") SelectedText *string `json:"selected_text,omitempty"` Note *string `json:"note,omitempty"` CreatedAt time.Time `json:"created_at"` } // Collection represents a user-created collection. type Collection struct { ID string `json:"id"` UserID string `json:"user_id"` Name string `json:"name"` Description *string `json:"description,omitempty"` IsPublic bool `json:"is_public"` ItemCount int `json:"item_count"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } // Mention represents a mention of content shared by a user. type Mention struct { ID string `json:"id"` UserID string `json:"user_id"` ContentType string `json:"content_type"` ContentID string `json:"content_id"` ContentRef string `json:"content_ref"` Text string `json:"text"` CreatedAt time.Time `json:"created_at"` } // ShortURL represents a shortened URL. type ShortURL struct { ID string `json:"id"` Slug string `json:"slug"` TargetURL string `json:"target_url"` CreatedBy *string `json:"created_by,omitempty"` ClickCount int64 `json:"click_count"` CreatedAt time.Time `json:"created_at"` ExpiresAt *time.Time `json:"expires_at,omitempty"` }