61 lines
2.0 KiB
Go
61 lines
2.0 KiB
Go
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"`
|
|
}
|