Documentation
¶
Overview ¶
Package store provides database access for minimaldoc-server. Supports PostgreSQL and SQLite backends.
Package store — repository interface definitions. Pattern: repository interface per domain aggregate.
Index ¶
- type AnalyticsStore
- type AuditLog
- type AuditLogStats
- type AuditStore
- type BlogComment
- type BlogPost
- type BlogStore
- type DB
- func (db *DB) AddTagToTopic(ctx context.Context, topicID, tagID string) error
- func (db *DB) AwardBadge(ctx context.Context, id, siteID, userID, badgeID, awardedBy string) error
- func (db *DB) CheckDocAccess(ctx context.Context, siteID, path string) (*DocAccess, error)
- func (db *DB) CleanExpiredSessions(ctx context.Context) (int64, error)
- func (db *DB) ClearSchedule(ctx context.Context, id string) error
- func (db *DB) CountSubscribers(ctx context.Context, siteID string, verifiedOnly bool) (int64, error)
- func (db *DB) CountUserApprovedTopics(ctx context.Context, siteID, userID string) (int64, error)
- func (db *DB) CountUserPostsToday(ctx context.Context, siteID, userID string) (int64, error)
- func (db *DB) CountUserTopicsToday(ctx context.Context, siteID, userID string) (int64, error)
- func (db *DB) CountUsers(ctx context.Context, siteID string) (int, error)
- func (db *DB) CountUsersByRole(ctx context.Context, siteID, role string) (int, error)
- func (db *DB) CreateAuditLog(ctx context.Context, ...) error
- func (db *DB) CreateBlogComment(ctx context.Context, ...) (*BlogComment, error)
- func (db *DB) CreateBlogPost(ctx context.Context, ...) (*BlogPost, error)
- func (db *DB) CreateDocAccess(ctx context.Context, id, siteID, pathPattern, requiredRole, description string) (*DocAccess, error)
- func (db *DB) CreateForumBadge(ctx context.Context, ...) (*ForumBadge, error)
- func (db *DB) CreateForumBan(ctx context.Context, id, siteID, userID, bannedBy, reason, expiresAt string, ...) error
- func (db *DB) CreateForumBookmark(ctx context.Context, id, siteID, userID, topicID string) error
- func (db *DB) CreateForumCategory(ctx context.Context, ...) (*ForumCategory, error)
- func (db *DB) CreateForumFlag(ctx context.Context, ...) error
- func (db *DB) CreateForumNotification(ctx context.Context, ...) error
- func (db *DB) CreateForumPost(ctx context.Context, id, siteID, topicID, parentID, authorID, content string) (*ForumPost, error)
- func (db *DB) CreateForumSubscription(ctx context.Context, id, siteID, userID, topicID, categoryID, level string) error
- func (db *DB) CreateForumTag(ctx context.Context, id, siteID, slug, name, description, color string) (*ForumTag, error)
- func (db *DB) CreateForumTopic(ctx context.Context, ...) (*ForumTopic, error)
- func (db *DB) CreateSession(ctx context.Context, id, userID, tokenHash, ipAddress, userAgent string, ...) error
- func (db *DB) CreateSite(ctx context.Context, id, name, domain, apiKeyHash string) (*Site, error)
- func (db *DB) CreateSubscriber(ctx context.Context, id, siteID, email, verifyToken string) error
- func (db *DB) CreateUpload(ctx context.Context, id, siteID, userID, filename, mimeType string, ...) (*Upload, error)
- func (db *DB) CreateUser(ctx context.Context, id, siteID, email, passwordHash, role, name string) (*User, error)
- func (db *DB) CreateUserWithOAuth(ctx context.Context, ...) (*User, error)
- func (db *DB) CreateUserWithVerification(ctx context.Context, ...) (*User, error)
- func (db *DB) CreateVerifiedSubscriber(ctx context.Context, id, siteID, email, provider, displayName string) error
- func (db *DB) DeleteBlogComment(ctx context.Context, id string) error
- func (db *DB) DeleteBlogPost(ctx context.Context, id string) error
- func (db *DB) DeleteDocAccess(ctx context.Context, id string) error
- func (db *DB) DeleteForumBadge(ctx context.Context, id string) error
- func (db *DB) DeleteForumBan(ctx context.Context, siteID, userID string) error
- func (db *DB) DeleteForumBookmark(ctx context.Context, userID, topicID string) error
- func (db *DB) DeleteForumCategory(ctx context.Context, id string) error
- func (db *DB) DeleteForumPost(ctx context.Context, id string) error
- func (db *DB) DeleteForumSubscription(ctx context.Context, userID, topicID, categoryID string) error
- func (db *DB) DeleteForumTag(ctx context.Context, id string) error
- func (db *DB) DeleteForumTopic(ctx context.Context, id string) error
- func (db *DB) DeleteSession(ctx context.Context, tokenHash string) error
- func (db *DB) DeleteSite(ctx context.Context, id string) error
- func (db *DB) DeleteUpload(ctx context.Context, id string) error
- func (db *DB) DeleteUser(ctx context.Context, id string) error
- func (db *DB) DeleteUserSessions(ctx context.Context, userID string) error
- func (db *DB) Driver() string
- func (db *DB) GetAuditLogEntityTypes(ctx context.Context, siteID string) ([]string, error)
- func (db *DB) GetAuditLogStats(ctx context.Context, siteID string) (*AuditLogStats, error)
- func (db *DB) GetBlogCommentByID(ctx context.Context, id string) (*BlogComment, error)
- func (db *DB) GetBlogPostByID(ctx context.Context, id string) (*BlogPost, error)
- func (db *DB) GetBlogPostBySlug(ctx context.Context, siteID, slug string) (*BlogPost, error)
- func (db *DB) GetBlogPostStats(ctx context.Context, siteID string) (total, published, draft int64, err error)
- func (db *DB) GetBounceRate(ctx context.Context, siteID string, since time.Time) (float64, error)
- func (db *DB) GetCommentStats(ctx context.Context, siteID string) (total, pending, approved int64, err error)
- func (db *DB) GetDailyViews(ctx context.Context, siteID string, days int) ([]DailyViewCount, error)
- func (db *DB) GetDocAccessByID(ctx context.Context, id string) (*DocAccess, error)
- func (db *DB) GetEventStats(ctx context.Context, siteID string, since time.Time) ([]EventStat, error)
- func (db *DB) GetEventsByName(ctx context.Context, siteID, name string, limit, offset int) ([]Event, error)
- func (db *DB) GetForumBadgeByID(ctx context.Context, id string) (*ForumBadge, error)
- func (db *DB) GetForumBan(ctx context.Context, siteID, userID string) (*ForumBan, error)
- func (db *DB) GetForumCategoryByID(ctx context.Context, id string) (*ForumCategory, error)
- func (db *DB) GetForumCategoryBySlug(ctx context.Context, siteID, slug string) (*ForumCategory, error)
- func (db *DB) GetForumFlagByID(ctx context.Context, id string) (*ForumFlag, error)
- func (db *DB) GetForumLeaderboard(ctx context.Context, siteID string, limit int) ([]ForumUserStats, error)
- func (db *DB) GetForumPostByID(ctx context.Context, id string) (*ForumPost, error)
- func (db *DB) GetForumStats(ctx context.Context, siteID string) (categories, topics, posts, users int64, err error)
- func (db *DB) GetForumTagByID(ctx context.Context, id string) (*ForumTag, error)
- func (db *DB) GetForumTagBySlug(ctx context.Context, siteID, slug string) (*ForumTag, error)
- func (db *DB) GetForumTopicByID(ctx context.Context, id string) (*ForumTopic, error)
- func (db *DB) GetForumTopicBySlug(ctx context.Context, siteID, slug string) (*ForumTopic, error)
- func (db *DB) GetOrCreateForumUserStats(ctx context.Context, id, siteID, userID string) (*ForumUserStats, error)
- func (db *DB) GetPageViewStats(ctx context.Context, siteID string, since time.Time) (totalViews int64, uniqueSessions int64, err error)
- func (db *DB) GetPageViewStatsExtended(ctx context.Context, siteID string, since time.Time) (totalViews, uniqueSessions int64, avgDuration float64, err error)
- func (db *DB) GetRatingStats(ctx context.Context, siteID string) (avgRating float64, totalRatings int64, err error)
- func (db *DB) GetRatingStatsExtended(ctx context.Context, siteID string) (avgRating float64, totalRatings, withComments, thisWeek int64, err error)
- func (db *DB) GetRatingsByPath(ctx context.Context, siteID, path string) (avgRating float64, count int64, err error)
- func (db *DB) GetRelatedPosts(ctx context.Context, siteID, excludeID, category, tags string, limit int) ([]BlogPost, error)
- func (db *DB) GetReputationHistory(ctx context.Context, userID string, limit, offset int) ([]ForumReputationLog, error)
- func (db *DB) GetScheduledPosts(ctx context.Context) ([]BlogPost, error)
- func (db *DB) GetSessionByToken(ctx context.Context, tokenHash string) (*Session, error)
- func (db *DB) GetSiteByAPIKey(ctx context.Context, apiKeyHash string) (*Site, error)
- func (db *DB) GetSiteByID(ctx context.Context, id string) (*Site, error)
- func (db *DB) GetSubscriberByEmail(ctx context.Context, siteID, email string) (*Subscriber, error)
- func (db *DB) GetSubscriberByToken(ctx context.Context, siteID, token string) (*Subscriber, error)
- func (db *DB) GetSubscriberStatsExtended(ctx context.Context, siteID string) (total, verified, pending, thisMonth int64, err error)
- func (db *DB) GetTopPages(ctx context.Context, siteID string, since time.Time, limit int) ([]struct{ ... }, error)
- func (db *DB) GetTopicSubscribers(ctx context.Context, topicID string) ([]string, error)
- func (db *DB) GetTopicTags(ctx context.Context, topicID string) ([]ForumTag, error)
- func (db *DB) GetTotalEventCount(ctx context.Context, siteID string, since time.Time) (int64, error)
- func (db *DB) GetTrafficSources(ctx context.Context, siteID string, since time.Time, limit int) ([]TrafficSource, error)
- func (db *DB) GetUniqueEventNames(ctx context.Context, siteID string, since time.Time) (int64, error)
- func (db *DB) GetUnreadNotificationCount(ctx context.Context, userID string) (int64, error)
- func (db *DB) GetUpload(ctx context.Context, id string) (*Upload, error)
- func (db *DB) GetUserBadges(ctx context.Context, userID string) ([]ForumUserBadge, error)
- func (db *DB) GetUserByEmail(ctx context.Context, siteID, email string) (*User, error)
- func (db *DB) GetUserByID(ctx context.Context, id string) (*User, error)
- func (db *DB) GetUserByOAuth(ctx context.Context, provider, providerID string) (*User, error)
- func (db *DB) GetUserByVerifyToken(ctx context.Context, token string) (*User, error)
- func (db *DB) HasUserBadge(ctx context.Context, userID, badgeID string) (bool, error)
- func (db *DB) HasUserBookmarkedTopic(ctx context.Context, userID, topicID string) (bool, error)
- func (db *DB) HasUserLikedPost(ctx context.Context, userID, postID string) (bool, error)
- func (db *DB) HasUserLikedTopic(ctx context.Context, userID, topicID string) (bool, error)
- func (db *DB) IncrementForumTopicViews(ctx context.Context, id string) error
- func (db *DB) IncrementForumUserStats(ctx context.Context, siteID, userID, field string, delta int) error
- func (db *DB) IsPostgres() bool
- func (db *DB) IsSQLite() bool
- func (db *DB) IsUserBanned(ctx context.Context, siteID, userID string) (bool, error)
- func (db *DB) LikeForumPost(ctx context.Context, id, siteID, userID, postID string) error
- func (db *DB) LikeForumTopic(ctx context.Context, id, siteID, userID, topicID string) error
- func (db *DB) LinkOAuthToUser(ctx context.Context, userID, oauthProvider, oauthID string) error
- func (db *DB) ListApprovedComments(ctx context.Context, postID string, limit, offset int) ([]BlogComment, error)
- func (db *DB) ListAuditLogs(ctx context.Context, siteID, action, entityType string, limit, offset int) ([]AuditLog, int, error)
- func (db *DB) ListBlogComments(ctx context.Context, siteID string, status string, limit, offset int) ([]BlogComment, error)
- func (db *DB) ListBlogPosts(ctx context.Context, siteID string, status string, limit, offset int) ([]BlogPost, error)
- func (db *DB) ListDocAccess(ctx context.Context, siteID string) ([]DocAccess, error)
- func (db *DB) ListForumBadges(ctx context.Context, siteID string) ([]ForumBadge, error)
- func (db *DB) ListForumBans(ctx context.Context, siteID string, limit, offset int) ([]ForumBan, int64, error)
- func (db *DB) ListForumCategories(ctx context.Context, siteID string) ([]ForumCategory, error)
- func (db *DB) ListForumFlags(ctx context.Context, siteID, status string, limit, offset int) ([]ForumFlag, int64, error)
- func (db *DB) ListForumNotifications(ctx context.Context, userID string, unreadOnly bool, limit, offset int) ([]ForumNotification, error)
- func (db *DB) ListForumPosts(ctx context.Context, topicID string, limit, offset int) ([]ForumPost, int64, error)
- func (db *DB) ListForumTags(ctx context.Context, siteID string) ([]ForumTag, error)
- func (db *DB) ListForumTopics(ctx context.Context, siteID, categoryID, status, search string, ...) ([]ForumTopic, int64, error)
- func (db *DB) ListForumTopicsByTag(ctx context.Context, siteID, tagID string, limit, offset int) ([]ForumTopic, int64, error)
- func (db *DB) ListPendingComments(ctx context.Context, siteID string, limit, offset int) ([]BlogComment, error)
- func (db *DB) ListPublishedBlogPosts(ctx context.Context, siteID string, limit, offset int) ([]BlogPost, error)
- func (db *DB) ListPublishedBlogPostsFiltered(ctx context.Context, siteID, category, tag, search string, limit, offset int) ([]BlogPost, int64, error)
- func (db *DB) ListRatings(ctx context.Context, siteID string, limit, offset int) ([]Rating, error)
- func (db *DB) ListRecentEvents(ctx context.Context, siteID string, limit int) ([]Event, error)
- func (db *DB) ListSites(ctx context.Context) ([]Site, error)
- func (db *DB) ListSubscribers(ctx context.Context, siteID string, verifiedOnly bool) ([]Subscriber, error)
- func (db *DB) ListUploads(ctx context.Context, siteID, userID string, limit, offset int) ([]Upload, error)
- func (db *DB) ListUserBookmarks(ctx context.Context, userID string, limit, offset int) ([]ForumBookmark, error)
- func (db *DB) ListUsers(ctx context.Context, siteID string) ([]User, error)
- func (db *DB) LogReputationChange(ctx context.Context, id, siteID, userID, action string, points int, ...) error
- func (db *DB) MarkAllNotificationsRead(ctx context.Context, userID string) error
- func (db *DB) MarkNotificationRead(ctx context.Context, id string) error
- func (db *DB) MarkPostAsSolution(ctx context.Context, postID, topicID string) error
- func (db *DB) Migrate() error
- func (db *DB) ModerateComment(ctx context.Context, id, status, moderatorID string) error
- func (db *DB) PinForumTopic(ctx context.Context, id string, pinned bool) error
- func (db *DB) Ping(ctx context.Context) error
- func (db *DB) PublishBlogPost(ctx context.Context, id string) error
- func (db *DB) PublishScheduledPosts(ctx context.Context) (int64, error)
- func (db *DB) RecordEvent(ctx context.Context, siteID, name, category, path, value, sessionHash string) error
- func (db *DB) RecordPageView(ctx context.Context, ...) error
- func (db *DB) RecordRating(ctx context.Context, siteID, path string, rating int, ...) error
- func (db *DB) RemoveTagFromTopic(ctx context.Context, topicID, tagID string) error
- func (db *DB) ResolveForumFlag(ctx context.Context, id, status, resolverID, resolutionNote string) error
- func (db *DB) RevokeBadge(ctx context.Context, userID, badgeID string) error
- func (db *DB) ScheduleBlogPost(ctx context.Context, id, scheduledAt string) error
- func (db *DB) SearchForum(ctx context.Context, siteID, query string, limit, offset int) ([]ForumTopic, int64, error)
- func (db *DB) UnlikeForumPost(ctx context.Context, userID, postID string) error
- func (db *DB) UnlikeForumTopic(ctx context.Context, userID, topicID string) error
- func (db *DB) UnpublishBlogPost(ctx context.Context, id string) error
- func (db *DB) UnsubscribeByEmail(ctx context.Context, siteID, email string) error
- func (db *DB) UpdateBlogPost(ctx context.Context, ...) error
- func (db *DB) UpdateDocAccess(ctx context.Context, id, pathPattern, requiredRole, description string) error
- func (db *DB) UpdateForumBadge(ctx context.Context, ...) error
- func (db *DB) UpdateForumCategory(ctx context.Context, id, slug, name, description, color, icon string, ...) error
- func (db *DB) UpdateForumPost(ctx context.Context, id, content, editorID string) error
- func (db *DB) UpdateForumSubscription(ctx context.Context, userID, topicID, categoryID, level string) error
- func (db *DB) UpdateForumTag(ctx context.Context, id, slug, name, description, color string) error
- func (db *DB) UpdateForumTopic(ctx context.Context, id, title, content string) error
- func (db *DB) UpdateForumTopicStatus(ctx context.Context, id, status string) error
- func (db *DB) UpdateForumUserLastSeen(ctx context.Context, siteID, userID string) error
- func (db *DB) UpdatePageViewDuration(ctx context.Context, siteID, path, sessionHash string, duration int) error
- func (db *DB) UpdatePageViewDurationAndBounce(ctx context.Context, siteID, path, sessionHash string, duration int, ...) error
- func (db *DB) UpdateSite(ctx context.Context, id, name, domain string) error
- func (db *DB) UpdateSiteAPIKey(ctx context.Context, siteID, newAPIKeyHash string) error
- func (db *DB) UpdateUser(ctx context.Context, id, email, role, name string) error
- func (db *DB) UpdateUserLastLogin(ctx context.Context, userID string) error
- func (db *DB) UpdateUserPassword(ctx context.Context, id, passwordHash string) error
- func (db *DB) VerifySubscriber(ctx context.Context, siteID, token string) error
- func (db *DB) VerifyUserEmail(ctx context.Context, userID string) error
- type DailyViewCount
- type DocAccess
- type DocsStore
- type Event
- type EventStat
- type EventStore
- type FeedbackStore
- type ForumBadge
- type ForumBan
- type ForumBookmark
- type ForumCategory
- type ForumFlag
- type ForumLike
- type ForumMention
- type ForumNotification
- type ForumPost
- type ForumReputationLog
- type ForumStore
- type ForumSubscription
- type ForumTag
- type ForumTopic
- type ForumUserBadge
- type ForumUserStats
- type NewsletterStore
- type PageView
- type Rating
- type Session
- type SessionStore
- type Site
- type SiteStore
- type Store
- type Subscriber
- type TrafficSource
- type Upload
- type UploadStore
- type User
- type UserStore
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AnalyticsStore ¶
type AnalyticsStore interface {
RecordPageView(ctx context.Context, siteID, path, referrer, country, deviceType, browser, os, sessionHash string) error
GetPageViewStats(ctx context.Context, siteID string, since time.Time) (totalViews int64, uniqueSessions int64, err error)
GetPageViewStatsExtended(ctx context.Context, siteID string, since time.Time) (totalViews, uniqueSessions int64, avgDuration float64, err error)
UpdatePageViewDuration(ctx context.Context, siteID, path, sessionHash string, duration int) error
UpdatePageViewDurationAndBounce(ctx context.Context, siteID, path, sessionHash string, duration int, isBounce *bool) error
GetBounceRate(ctx context.Context, siteID string, since time.Time) (float64, error)
GetTopPages(ctx context.Context, siteID string, since time.Time, limit int) ([]struct {
Path string
Views int64
}, error)
GetTrafficSources(ctx context.Context, siteID string, since time.Time, limit int) ([]TrafficSource, error)
GetDailyViews(ctx context.Context, siteID string, days int) ([]DailyViewCount, error)
}
AnalyticsStore handles page view tracking and statistics.
type AuditLog ¶
type AuditLog struct {
ID string
SiteID string
UserID sql.NullString
UserEmail string
Action string
EntityType string
EntityID sql.NullString
EntityName sql.NullString
Details sql.NullString
IPAddress sql.NullString
UserAgent sql.NullString
CreatedAt string
}
AuditLog represents an audit log entry for admin actions.
type AuditLogStats ¶
AuditLogStats holds aggregate counts for audit logs.
type AuditStore ¶
type AuditStore interface {
CreateAuditLog(ctx context.Context, id, siteID, userID, userEmail, action, entityType, entityID, entityName, details, ipAddress, userAgent string) error
ListAuditLogs(ctx context.Context, siteID, action, entityType string, limit, offset int) ([]AuditLog, int, error)
GetAuditLogStats(ctx context.Context, siteID string) (*AuditLogStats, error)
GetAuditLogEntityTypes(ctx context.Context, siteID string) ([]string, error)
}
AuditStore handles audit log operations.
type BlogComment ¶
type BlogComment struct {
ID string
SiteID string
PostID string
ParentID sql.NullString
AuthorName string
AuthorEmail string
Content string
Status string
IPAddress sql.NullString
UserAgent sql.NullString
CreatedAt string
ModeratedAt sql.NullString
ModeratedBy sql.NullString
// Joined fields
ModeratorName sql.NullString
Replies []BlogComment
}
BlogComment represents a blog comment.
type BlogPost ¶
type BlogPost struct {
ID string `json:"id"`
SiteID string `json:"site_id"`
AuthorID sql.NullString `json:"author_id"`
Slug string `json:"slug"`
Title string `json:"title"`
Description sql.NullString `json:"description"`
Content string `json:"content"`
FeaturedImage sql.NullString `json:"featured_image"`
Tags string `json:"tags"`
Category sql.NullString `json:"category"`
Status string `json:"status"`
Visibility string `json:"visibility"`
PublishedAt sql.NullString `json:"published_at"`
ScheduledAt sql.NullString `json:"scheduled_at"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
AuthorName sql.NullString `json:"author_name"`
AuthorEmail sql.NullString `json:"author_email"`
}
BlogPost represents a blog post.
type BlogStore ¶
type BlogStore interface {
CreateBlogPost(ctx context.Context, id, siteID, authorID, slug, title, description, content, featuredImage, tags, category, visibility string) (*BlogPost, error)
GetBlogPostByID(ctx context.Context, id string) (*BlogPost, error)
GetBlogPostBySlug(ctx context.Context, siteID, slug string) (*BlogPost, error)
UpdateBlogPost(ctx context.Context, id, slug, title, description, content, featuredImage, tags, category, visibility string) error
DeleteBlogPost(ctx context.Context, id string) error
ListBlogPosts(ctx context.Context, siteID string, status string, limit, offset int) ([]BlogPost, error)
ListPublishedBlogPosts(ctx context.Context, siteID string, limit, offset int) ([]BlogPost, error)
ListPublishedBlogPostsFiltered(ctx context.Context, siteID, category, tag, search string, limit, offset int) ([]BlogPost, int64, error)
GetRelatedPosts(ctx context.Context, siteID, excludeID, category, tags string, limit int) ([]BlogPost, error)
GetBlogPostStats(ctx context.Context, siteID string) (total, published, draft int64, err error)
PublishBlogPost(ctx context.Context, id string) error
UnpublishBlogPost(ctx context.Context, id string) error
ScheduleBlogPost(ctx context.Context, id, scheduledAt string) error
ClearSchedule(ctx context.Context, id string) error
GetScheduledPosts(ctx context.Context) ([]BlogPost, error)
PublishScheduledPosts(ctx context.Context) (int64, error)
// Comments
CreateBlogComment(ctx context.Context, id, siteID, postID, parentID, authorName, authorEmail, content, ipAddress, userAgent string) (*BlogComment, error)
GetBlogCommentByID(ctx context.Context, id string) (*BlogComment, error)
ListBlogComments(ctx context.Context, siteID string, status string, limit, offset int) ([]BlogComment, error)
ListApprovedComments(ctx context.Context, postID string, limit, offset int) ([]BlogComment, error)
ListPendingComments(ctx context.Context, siteID string, limit, offset int) ([]BlogComment, error)
ModerateComment(ctx context.Context, id, status, moderatorID string) error
DeleteBlogComment(ctx context.Context, id string) error
GetCommentStats(ctx context.Context, siteID string) (total, pending, approved int64, err error)
}
BlogStore handles blog posts and comments.
type DB ¶
DB wraps the database connection and provides query methods.
func (*DB) AddTagToTopic ¶
func (*DB) AwardBadge ¶
func (*DB) CheckDocAccess ¶
CheckDocAccess checks if a path matches any access rule and returns the required role. Returns nil if the path is not protected.
func (*DB) CleanExpiredSessions ¶
func (*DB) ClearSchedule ¶
ClearSchedule removes the scheduled time from a post.
func (*DB) CountSubscribers ¶
func (*DB) CountUserApprovedTopics ¶
CountUserApprovedTopics returns the number of published topics by a user.
func (*DB) CountUserPostsToday ¶
CountUserPostsToday returns the number of posts created by a user today.
func (*DB) CountUserTopicsToday ¶
CountUserTopicsToday returns the number of topics created by a user today.
func (*DB) CountUsersByRole ¶
func (*DB) CreateAuditLog ¶
func (db *DB) CreateAuditLog(ctx context.Context, id, siteID, userID, userEmail, action, entityType, entityID, entityName, details, ipAddress, userAgent string) error
CreateAuditLog creates a new audit log entry.
func (*DB) CreateBlogComment ¶
func (*DB) CreateBlogPost ¶
func (*DB) CreateDocAccess ¶
func (*DB) CreateForumBadge ¶
func (*DB) CreateForumBan ¶
func (*DB) CreateForumBookmark ¶
func (*DB) CreateForumCategory ¶
func (*DB) CreateForumFlag ¶
func (*DB) CreateForumNotification ¶
func (*DB) CreateForumPost ¶
func (*DB) CreateForumSubscription ¶
func (*DB) CreateForumTag ¶
func (*DB) CreateForumTopic ¶
func (*DB) CreateSession ¶
func (*DB) CreateSite ¶
func (*DB) CreateSubscriber ¶
func (*DB) CreateUpload ¶
func (db *DB) CreateUpload(ctx context.Context, id, siteID, userID, filename, mimeType string, sizeBytes int64, storagePath, url string) (*Upload, error)
CreateUpload stores upload metadata.
func (*DB) CreateUser ¶
func (*DB) CreateUserWithOAuth ¶
func (db *DB) CreateUserWithOAuth(ctx context.Context, id, siteID, email, oauthProvider, oauthID, name, avatarURL, role string) (*User, error)
CreateUserWithOAuth creates a new user with OAuth credentials.
func (*DB) CreateUserWithVerification ¶
func (db *DB) CreateUserWithVerification(ctx context.Context, id, siteID, email, passwordHash, role, name, verifyToken string) (*User, error)
CreateUserWithVerification creates a new user with a verification token.
func (*DB) CreateVerifiedSubscriber ¶
func (db *DB) CreateVerifiedSubscriber(ctx context.Context, id, siteID, email, provider, displayName string) error
CreateVerifiedSubscriber inserts or upgrades a subscriber as OAuth-verified. ON CONFLICT upgrades an existing email-only subscriber to OAuth-verified.
func (*DB) DeleteBlogComment ¶
func (*DB) DeleteForumBan ¶
func (*DB) DeleteForumBookmark ¶
func (*DB) DeleteForumCategory ¶
func (*DB) DeleteForumSubscription ¶
func (*DB) DeleteUpload ¶
DeleteUpload removes an upload record.
func (*DB) DeleteUserSessions ¶
func (*DB) GetAuditLogEntityTypes ¶
GetAuditLogEntityTypes returns distinct entity types in the audit log for filtering.
func (*DB) GetAuditLogStats ¶
GetAuditLogStats returns aggregate counts for audit logs.
func (*DB) GetBlogCommentByID ¶
func (*DB) GetBlogPostByID ¶
func (*DB) GetBlogPostBySlug ¶
func (*DB) GetBlogPostStats ¶
func (*DB) GetBounceRate ¶
func (*DB) GetCommentStats ¶
func (*DB) GetDailyViews ¶
func (*DB) GetDocAccessByID ¶
func (*DB) GetEventStats ¶
func (db *DB) GetEventStats(ctx context.Context, siteID string, since time.Time) ([]EventStat, error)
GetEventStats returns event counts grouped by name for a site since a given time.
func (*DB) GetEventsByName ¶
func (db *DB) GetEventsByName(ctx context.Context, siteID, name string, limit, offset int) ([]Event, error)
GetEventsByName returns events with a specific name for a site.
func (*DB) GetForumBadgeByID ¶
func (*DB) GetForumBan ¶
func (*DB) GetForumCategoryByID ¶
func (*DB) GetForumCategoryBySlug ¶
func (*DB) GetForumFlagByID ¶
func (*DB) GetForumLeaderboard ¶
func (*DB) GetForumPostByID ¶
func (*DB) GetForumStats ¶
func (*DB) GetForumTagByID ¶
func (*DB) GetForumTagBySlug ¶
func (*DB) GetForumTopicByID ¶
func (*DB) GetForumTopicBySlug ¶
func (*DB) GetOrCreateForumUserStats ¶
func (*DB) GetPageViewStats ¶
func (*DB) GetPageViewStatsExtended ¶
func (*DB) GetRatingStats ¶
func (*DB) GetRatingStatsExtended ¶
func (*DB) GetRatingsByPath ¶
func (*DB) GetRelatedPosts ¶
func (db *DB) GetRelatedPosts(ctx context.Context, siteID, excludeID, category, tags string, limit int) ([]BlogPost, error)
GetRelatedPosts returns posts related by category or tags (public only).
func (*DB) GetReputationHistory ¶
func (*DB) GetScheduledPosts ¶
GetScheduledPosts returns posts that are due to be published.
func (*DB) GetSessionByToken ¶
func (*DB) GetSiteByAPIKey ¶
func (*DB) GetSubscriberByEmail ¶
func (*DB) GetSubscriberByToken ¶
func (*DB) GetSubscriberStatsExtended ¶
func (*DB) GetTopPages ¶
func (*DB) GetTopicSubscribers ¶
func (*DB) GetTopicTags ¶
func (*DB) GetTotalEventCount ¶
func (db *DB) GetTotalEventCount(ctx context.Context, siteID string, since time.Time) (int64, error)
GetTotalEventCount returns the total number of events for a site since a given time.
func (*DB) GetTrafficSources ¶
func (*DB) GetUniqueEventNames ¶
func (db *DB) GetUniqueEventNames(ctx context.Context, siteID string, since time.Time) (int64, error)
GetUniqueEventNames returns the count of unique event names for a site since a given time.
func (*DB) GetUnreadNotificationCount ¶
func (*DB) GetUserBadges ¶
func (*DB) GetUserByEmail ¶
func (*DB) GetUserByOAuth ¶
func (*DB) GetUserByVerifyToken ¶
GetUserByVerifyToken finds a user by their verification token.
func (*DB) HasUserBadge ¶
func (*DB) HasUserBookmarkedTopic ¶
func (*DB) HasUserLikedPost ¶
func (*DB) HasUserLikedTopic ¶
func (*DB) IncrementForumTopicViews ¶
func (*DB) IncrementForumUserStats ¶
func (*DB) IsPostgres ¶
IsPostgres returns true if using PostgreSQL.
func (*DB) IsUserBanned ¶
func (*DB) LikeForumPost ¶
func (*DB) LikeForumTopic ¶
func (*DB) LinkOAuthToUser ¶
LinkOAuthToUser links OAuth credentials to an existing user.
func (*DB) ListApprovedComments ¶
func (*DB) ListAuditLogs ¶
func (db *DB) ListAuditLogs(ctx context.Context, siteID, action, entityType string, limit, offset int) ([]AuditLog, int, error)
ListAuditLogs returns audit logs with optional filtering and pagination.
func (*DB) ListBlogComments ¶
func (*DB) ListBlogPosts ¶
func (*DB) ListDocAccess ¶
func (*DB) ListForumBadges ¶
func (*DB) ListForumBans ¶
func (*DB) ListForumCategories ¶
func (*DB) ListForumFlags ¶
func (*DB) ListForumNotifications ¶
func (*DB) ListForumPosts ¶
func (*DB) ListForumTags ¶
func (*DB) ListForumTopics ¶
func (*DB) ListForumTopicsByTag ¶
func (*DB) ListPendingComments ¶
func (*DB) ListPublishedBlogPosts ¶
func (*DB) ListPublishedBlogPostsFiltered ¶
func (db *DB) ListPublishedBlogPostsFiltered(ctx context.Context, siteID, category, tag, search string, limit, offset int) ([]BlogPost, int64, error)
ListPublishedBlogPostsFiltered returns published public posts with filtering and pagination.
func (*DB) ListRatings ¶
func (*DB) ListRecentEvents ¶
ListRecentEvents returns the most recent events for a site.
func (*DB) ListSubscribers ¶
func (*DB) ListUploads ¶
func (db *DB) ListUploads(ctx context.Context, siteID, userID string, limit, offset int) ([]Upload, error)
ListUploads returns uploads for a site, optionally filtered by user.
func (*DB) ListUserBookmarks ¶
func (*DB) LogReputationChange ¶
func (*DB) MarkAllNotificationsRead ¶
func (*DB) MarkNotificationRead ¶
func (*DB) MarkPostAsSolution ¶
func (*DB) ModerateComment ¶
func (*DB) PinForumTopic ¶
func (*DB) PublishScheduledPosts ¶
PublishScheduledPosts publishes all posts that are due.
func (*DB) RecordEvent ¶
func (db *DB) RecordEvent(ctx context.Context, siteID, name, category, path, value, sessionHash string) error
RecordEvent stores a custom analytics event.
func (*DB) RecordPageView ¶
func (*DB) RecordRating ¶
func (*DB) RemoveTagFromTopic ¶
func (*DB) ResolveForumFlag ¶
func (*DB) RevokeBadge ¶
func (*DB) ScheduleBlogPost ¶
ScheduleBlogPost sets a future publish time for a post.
func (*DB) SearchForum ¶
func (*DB) UnlikeForumPost ¶
func (*DB) UnlikeForumTopic ¶
func (*DB) UnpublishBlogPost ¶
func (*DB) UnsubscribeByEmail ¶
func (*DB) UpdateBlogPost ¶
func (*DB) UpdateDocAccess ¶
func (*DB) UpdateForumBadge ¶
func (*DB) UpdateForumCategory ¶
func (*DB) UpdateForumPost ¶
func (*DB) UpdateForumSubscription ¶
func (*DB) UpdateForumTag ¶
func (*DB) UpdateForumTopic ¶
func (*DB) UpdateForumTopicStatus ¶
func (*DB) UpdateForumUserLastSeen ¶
func (*DB) UpdatePageViewDuration ¶
func (*DB) UpdatePageViewDurationAndBounce ¶
func (*DB) UpdateSite ¶
func (*DB) UpdateSiteAPIKey ¶
func (*DB) UpdateUser ¶
func (*DB) UpdateUserLastLogin ¶
func (*DB) UpdateUserPassword ¶
func (*DB) VerifySubscriber ¶
type DailyViewCount ¶
DailyViewCount represents page views for a single day
type DocAccess ¶
type DocAccess struct {
ID string
SiteID string
PathPattern string
RequiredRole string
Description sql.NullString
CreatedAt string
UpdatedAt string
}
DocAccess represents an access rule for protected documentation paths.
type DocsStore ¶
type DocsStore interface {
CreateDocAccess(ctx context.Context, id, siteID, pathPattern, requiredRole, description string) (*DocAccess, error)
GetDocAccessByID(ctx context.Context, id string) (*DocAccess, error)
ListDocAccess(ctx context.Context, siteID string) ([]DocAccess, error)
UpdateDocAccess(ctx context.Context, id, pathPattern, requiredRole, description string) error
DeleteDocAccess(ctx context.Context, id string) error
CheckDocAccess(ctx context.Context, siteID, path string) (*DocAccess, error)
}
DocsStore handles private documentation access rules.
type Event ¶
type Event struct {
ID int64
SiteID string
Name string
Category sql.NullString
Path sql.NullString
Value sql.NullString
SessionHash sql.NullString
CreatedAt string
}
Event represents a custom analytics event.
type EventStore ¶
type EventStore interface {
RecordEvent(ctx context.Context, siteID, name, category, path, value, sessionHash string) error
GetEventStats(ctx context.Context, siteID string, since time.Time) ([]EventStat, error)
GetEventsByName(ctx context.Context, siteID, name string, limit, offset int) ([]Event, error)
ListRecentEvents(ctx context.Context, siteID string, limit int) ([]Event, error)
GetTotalEventCount(ctx context.Context, siteID string, since time.Time) (int64, error)
GetUniqueEventNames(ctx context.Context, siteID string, since time.Time) (int64, error)
}
EventStore handles custom analytics events.
type FeedbackStore ¶
type FeedbackStore interface {
RecordRating(ctx context.Context, siteID, path string, rating int, feedback, sessionHash string) error
GetRatingStats(ctx context.Context, siteID string) (avgRating float64, totalRatings int64, err error)
GetRatingStatsExtended(ctx context.Context, siteID string) (avgRating float64, totalRatings, withComments, thisWeek int64, err error)
GetRatingsByPath(ctx context.Context, siteID, path string) (avgRating float64, count int64, err error)
ListRatings(ctx context.Context, siteID string, limit, offset int) ([]Rating, error)
}
FeedbackStore handles user feedback and ratings.
type ForumBadge ¶
type ForumBadge struct {
ID string
SiteID string
Slug string
Name string
Description sql.NullString
Icon sql.NullString
Color sql.NullString
Criteria sql.NullString
Tier string
IsManual bool
CreatedAt string
}
ForumBadge represents a badge definition.
type ForumBan ¶
type ForumBan struct {
ID string
SiteID string
UserID string
BannedBy sql.NullString
Reason string
ExpiresAt sql.NullString
IsPermanent bool
CreatedAt string
// Joined fields
UserName sql.NullString
UserEmail sql.NullString
BannerName sql.NullString
}
ForumBan represents a user ban.
type ForumBookmark ¶
type ForumBookmark struct {
ID string
SiteID string
UserID string
TopicID string
CreatedAt string
// Joined fields
TopicTitle sql.NullString
TopicSlug sql.NullString
}
ForumBookmark represents a saved topic.
type ForumCategory ¶
type ForumCategory struct {
ID string
SiteID string
ParentID sql.NullString
Slug string
Name string
Description sql.NullString
Color sql.NullString
Icon sql.NullString
Position int
IsLocked bool
CreatedAt string
UpdatedAt string
// Joined/computed fields
TopicCount int64
PostCount int64
Children []ForumCategory
}
ForumCategory represents a forum category.
type ForumFlag ¶
type ForumFlag struct {
ID string
SiteID string
ReporterID sql.NullString
TopicID sql.NullString
PostID sql.NullString
Reason string
Description sql.NullString
Status string
ResolvedBy sql.NullString
ResolvedAt sql.NullString
ResolutionNote sql.NullString
CreatedAt string
// Joined fields
ReporterName sql.NullString
ResolverName sql.NullString
TopicTitle sql.NullString
PostContent sql.NullString
}
ForumFlag represents a content report.
type ForumLike ¶
type ForumLike struct {
ID string
SiteID string
UserID string
TopicID sql.NullString
PostID sql.NullString
CreatedAt string
}
ForumLike represents a like on a topic or post.
type ForumMention ¶
type ForumMention struct {
ID string
SiteID string
UserID string
MentionedBy string
TopicID sql.NullString
PostID sql.NullString
IsRead bool
CreatedAt string
// Joined fields
MentionerName sql.NullString
TopicTitle sql.NullString
}
ForumMention represents an @mention.
type ForumNotification ¶
type ForumNotification struct {
ID string
SiteID string
UserID string
Type string
Title string
Message sql.NullString
TopicID sql.NullString
PostID sql.NullString
ActorID sql.NullString
IsRead bool
CreatedAt string
// Joined fields
ActorName sql.NullString
ActorAvatar sql.NullString
TopicSlug sql.NullString
}
ForumNotification represents an in-app notification.
type ForumPost ¶
type ForumPost struct {
ID string
SiteID string
TopicID string
ParentID sql.NullString
AuthorID sql.NullString
Content string
LikeCount int64
IsSolution bool
EditedAt sql.NullString
EditedBy sql.NullString
CreatedAt string
UpdatedAt string
// Joined fields
AuthorName sql.NullString
AuthorEmail sql.NullString
AuthorAvatar sql.NullString
EditorName sql.NullString
IsLiked bool
Replies []ForumPost
}
ForumPost represents a forum reply.
type ForumReputationLog ¶
type ForumReputationLog struct {
ID string
SiteID string
UserID string
Action string
Points int
TopicID sql.NullString
PostID sql.NullString
BadgeID sql.NullString
Note sql.NullString
CreatedAt string
}
ForumReputationLog represents a reputation point entry.
type ForumStore ¶
type ForumStore interface {
// Categories
CreateForumCategory(ctx context.Context, id, siteID, parentID, slug, name, description, color, icon string, position int) (*ForumCategory, error)
GetForumCategoryByID(ctx context.Context, id string) (*ForumCategory, error)
GetForumCategoryBySlug(ctx context.Context, siteID, slug string) (*ForumCategory, error)
ListForumCategories(ctx context.Context, siteID string) ([]ForumCategory, error)
UpdateForumCategory(ctx context.Context, id, slug, name, description, color, icon string, position int, isLocked bool) error
DeleteForumCategory(ctx context.Context, id string) error
// Topics
CreateForumTopic(ctx context.Context, id, siteID, categoryID, authorID, slug, title, content, status string) (*ForumTopic, error)
GetForumTopicByID(ctx context.Context, id string) (*ForumTopic, error)
GetForumTopicBySlug(ctx context.Context, siteID, slug string) (*ForumTopic, error)
ListForumTopics(ctx context.Context, siteID, categoryID, status, search string, limit, offset int) ([]ForumTopic, int64, error)
ListForumTopicsByTag(ctx context.Context, siteID, tagID string, limit, offset int) ([]ForumTopic, int64, error)
UpdateForumTopic(ctx context.Context, id, title, content string) error
UpdateForumTopicStatus(ctx context.Context, id, status string) error
PinForumTopic(ctx context.Context, id string, pinned bool) error
IncrementForumTopicViews(ctx context.Context, id string) error
DeleteForumTopic(ctx context.Context, id string) error
// Posts
CreateForumPost(ctx context.Context, id, siteID, topicID, parentID, authorID, content string) (*ForumPost, error)
GetForumPostByID(ctx context.Context, id string) (*ForumPost, error)
ListForumPosts(ctx context.Context, topicID string, limit, offset int) ([]ForumPost, int64, error)
UpdateForumPost(ctx context.Context, id, content, editorID string) error
MarkPostAsSolution(ctx context.Context, postID, topicID string) error
DeleteForumPost(ctx context.Context, id string) error
// Tags
CreateForumTag(ctx context.Context, id, siteID, slug, name, description, color string) (*ForumTag, error)
GetForumTagByID(ctx context.Context, id string) (*ForumTag, error)
GetForumTagBySlug(ctx context.Context, siteID, slug string) (*ForumTag, error)
ListForumTags(ctx context.Context, siteID string) ([]ForumTag, error)
UpdateForumTag(ctx context.Context, id, slug, name, description, color string) error
DeleteForumTag(ctx context.Context, id string) error
AddTagToTopic(ctx context.Context, topicID, tagID string) error
RemoveTagFromTopic(ctx context.Context, topicID, tagID string) error
GetTopicTags(ctx context.Context, topicID string) ([]ForumTag, error)
// Likes
LikeForumTopic(ctx context.Context, id, siteID, userID, topicID string) error
UnlikeForumTopic(ctx context.Context, userID, topicID string) error
LikeForumPost(ctx context.Context, id, siteID, userID, postID string) error
UnlikeForumPost(ctx context.Context, userID, postID string) error
HasUserLikedTopic(ctx context.Context, userID, topicID string) (bool, error)
HasUserLikedPost(ctx context.Context, userID, postID string) (bool, error)
// Bookmarks
CreateForumBookmark(ctx context.Context, id, siteID, userID, topicID string) error
DeleteForumBookmark(ctx context.Context, userID, topicID string) error
HasUserBookmarkedTopic(ctx context.Context, userID, topicID string) (bool, error)
ListUserBookmarks(ctx context.Context, userID string, limit, offset int) ([]ForumBookmark, error)
// Subscriptions
CreateForumSubscription(ctx context.Context, id, siteID, userID, topicID, categoryID, level string) error
UpdateForumSubscription(ctx context.Context, userID, topicID, categoryID, level string) error
DeleteForumSubscription(ctx context.Context, userID, topicID, categoryID string) error
GetTopicSubscribers(ctx context.Context, topicID string) ([]string, error)
// Notifications
CreateForumNotification(ctx context.Context, id, siteID, userID, notifType, title, message, topicID, postID, actorID string) error
ListForumNotifications(ctx context.Context, userID string, unreadOnly bool, limit, offset int) ([]ForumNotification, error)
MarkNotificationRead(ctx context.Context, id string) error
MarkAllNotificationsRead(ctx context.Context, userID string) error
GetUnreadNotificationCount(ctx context.Context, userID string) (int64, error)
// Flags
CreateForumFlag(ctx context.Context, id, siteID, reporterID, topicID, postID, reason, description string) error
GetForumFlagByID(ctx context.Context, id string) (*ForumFlag, error)
ListForumFlags(ctx context.Context, siteID, status string, limit, offset int) ([]ForumFlag, int64, error)
ResolveForumFlag(ctx context.Context, id, status, resolverID, resolutionNote string) error
// Bans
CreateForumBan(ctx context.Context, id, siteID, userID, bannedBy, reason, expiresAt string, isPermanent bool) error
GetForumBan(ctx context.Context, siteID, userID string) (*ForumBan, error)
IsUserBanned(ctx context.Context, siteID, userID string) (bool, error)
ListForumBans(ctx context.Context, siteID string, limit, offset int) ([]ForumBan, int64, error)
DeleteForumBan(ctx context.Context, siteID, userID string) error
// User stats
GetOrCreateForumUserStats(ctx context.Context, id, siteID, userID string) (*ForumUserStats, error)
UpdateForumUserLastSeen(ctx context.Context, siteID, userID string) error
IncrementForumUserStats(ctx context.Context, siteID, userID, field string, delta int) error
GetForumLeaderboard(ctx context.Context, siteID string, limit int) ([]ForumUserStats, error)
// Badges
CreateForumBadge(ctx context.Context, id, siteID, slug, name, description, icon, color, criteria, tier string, isManual bool) (*ForumBadge, error)
GetForumBadgeByID(ctx context.Context, id string) (*ForumBadge, error)
ListForumBadges(ctx context.Context, siteID string) ([]ForumBadge, error)
UpdateForumBadge(ctx context.Context, id, slug, name, description, icon, color, criteria, tier string, isManual bool) error
DeleteForumBadge(ctx context.Context, id string) error
AwardBadge(ctx context.Context, id, siteID, userID, badgeID, awardedBy string) error
RevokeBadge(ctx context.Context, userID, badgeID string) error
HasUserBadge(ctx context.Context, userID, badgeID string) (bool, error)
GetUserBadges(ctx context.Context, userID string) ([]ForumUserBadge, error)
// Reputation
LogReputationChange(ctx context.Context, id, siteID, userID, action string, points int, topicID, postID, badgeID, note string) error
GetReputationHistory(ctx context.Context, userID string, limit, offset int) ([]ForumReputationLog, error)
// Stats and search
GetForumStats(ctx context.Context, siteID string) (categories, topics, posts, users int64, err error)
SearchForum(ctx context.Context, siteID, query string, limit, offset int) ([]ForumTopic, int64, error)
CountUserTopicsToday(ctx context.Context, siteID, userID string) (int64, error)
CountUserApprovedTopics(ctx context.Context, siteID, userID string) (int64, error)
CountUserPostsToday(ctx context.Context, siteID, userID string) (int64, error)
}
ForumStore handles all forum operations.
type ForumSubscription ¶
type ForumSubscription struct {
ID string
SiteID string
UserID string
TopicID sql.NullString
CategoryID sql.NullString
Level string
CreatedAt string
}
ForumSubscription represents a topic/category subscription.
type ForumTag ¶
type ForumTag struct {
ID string
SiteID string
Slug string
Name string
Description sql.NullString
Color sql.NullString
UsageCount int64
CreatedAt string
}
ForumTag represents a forum tag.
type ForumTopic ¶
type ForumTopic struct {
ID string
SiteID string
CategoryID sql.NullString
AuthorID sql.NullString
Slug string
Title string
Content string
Status string
IsPinned bool
IsSolved bool
SolutionPostID sql.NullString
ViewCount int64
LikeCount int64
PostCount int64
LastPostAt sql.NullString
LastPostBy sql.NullString
CreatedAt string
UpdatedAt string
// Joined fields
AuthorName sql.NullString
AuthorEmail sql.NullString
AuthorAvatar sql.NullString
CategoryName sql.NullString
CategorySlug sql.NullString
LastPostAuthor sql.NullString
Tags []ForumTag
IsLiked bool
IsBookmarked bool
}
ForumTopic represents a forum discussion thread.
type ForumUserBadge ¶
type ForumUserBadge struct {
ID string
SiteID string
UserID string
BadgeID string
AwardedBy sql.NullString
AwardedAt string
// Joined fields
BadgeName sql.NullString
BadgeIcon sql.NullString
BadgeColor sql.NullString
BadgeTier sql.NullString
}
ForumUserBadge represents a badge awarded to a user.
type ForumUserStats ¶
type ForumUserStats struct {
ID string
SiteID string
UserID string
Reputation int64
TopicCount int64
PostCount int64
LikeReceivedCount int64
LikeGivenCount int64
SolutionCount int64
LastSeenAt sql.NullString
CreatedAt string
UpdatedAt string
// Joined fields
UserName sql.NullString
UserEmail sql.NullString
UserAvatar sql.NullString
Badges []ForumUserBadge
}
ForumUserStats represents user reputation and stats.
type NewsletterStore ¶
type NewsletterStore interface {
CreateSubscriber(ctx context.Context, id, siteID, email, verifyToken string) error
CreateVerifiedSubscriber(ctx context.Context, id, siteID, email, provider, displayName string) error
GetSubscriberByEmail(ctx context.Context, siteID, email string) (*Subscriber, error)
GetSubscriberByToken(ctx context.Context, siteID, token string) (*Subscriber, error)
VerifySubscriber(ctx context.Context, siteID, token string) error
UnsubscribeByEmail(ctx context.Context, siteID, email string) error
ListSubscribers(ctx context.Context, siteID string, verifiedOnly bool) ([]Subscriber, error)
CountSubscribers(ctx context.Context, siteID string, verifiedOnly bool) (int64, error)
GetSubscriberStatsExtended(ctx context.Context, siteID string) (total, verified, pending, thisMonth int64, err error)
}
NewsletterStore handles newsletter subscriptions.
type PageView ¶
type PageView struct {
ID int64
SiteID string
Path string
Referrer sql.NullString
Country sql.NullString
DeviceType sql.NullString
Browser sql.NullString
OS sql.NullString
SessionHash sql.NullString
CreatedAt string
}
PageView represents an analytics page view.
type Rating ¶
type Rating struct {
ID int64
SiteID string
Path string
Rating int
Feedback sql.NullString
SessionHash sql.NullString
CreatedAt string
}
Rating represents page feedback.
type Session ¶
type Session struct {
ID string
UserID string
TokenHash string
IPAddress sql.NullString
UserAgent sql.NullString
ExpiresAt string
CreatedAt string
}
Session represents a user session.
type SessionStore ¶
type SessionStore interface {
CreateSession(ctx context.Context, id, userID, tokenHash, ipAddress, userAgent string, expiresAt time.Time) error
GetSessionByToken(ctx context.Context, tokenHash string) (*Session, error)
DeleteSession(ctx context.Context, tokenHash string) error
DeleteUserSessions(ctx context.Context, userID string) error
CleanExpiredSessions(ctx context.Context) (int64, error)
}
SessionStore handles user session management.
type Site ¶
type Site struct {
ID string
Name string
Domain sql.NullString
APIKey string
Config string
CreatedAt string // SQLite returns string
UpdatedAt string
}
Site represents a registered site.
type SiteStore ¶
type SiteStore interface {
CreateSite(ctx context.Context, id, name, domain, apiKeyHash string) (*Site, error)
GetSiteByID(ctx context.Context, id string) (*Site, error)
GetSiteByAPIKey(ctx context.Context, apiKeyHash string) (*Site, error)
ListSites(ctx context.Context) ([]Site, error)
UpdateSite(ctx context.Context, id, name, domain string) error
UpdateSiteAPIKey(ctx context.Context, siteID, newAPIKeyHash string) error
DeleteSite(ctx context.Context, id string) error
}
SiteStore handles multi-tenant site management.
type Store ¶
type Store interface {
AnalyticsStore
AuditStore
BlogStore
DocsStore
EventStore
FeedbackStore
ForumStore
NewsletterStore
SessionStore
SiteStore
UploadStore
UserStore
// Core methods
Ping(ctx context.Context) error
Driver() string
Close() error
}
Store composes all domain repositories with core database operations.
type Subscriber ¶
type Subscriber struct {
ID string
SiteID string
Email string
Verified bool
VerifyToken sql.NullString
VerifySentAt sql.NullString
SubscribedAt string
UnsubscribedAt sql.NullString
OAuthProvider string
OAuthDisplayName string
VerifiedVia string
}
Subscriber represents a newsletter subscriber.
type TrafficSource ¶
TrafficSource represents aggregated referrer data
type Upload ¶
type Upload struct {
ID string
SiteID string
UserID string
Filename string
MimeType string
SizeBytes int64
StoragePath string
URL string
CreatedAt string
}
Upload represents an uploaded file.
type UploadStore ¶
type UploadStore interface {
CreateUpload(ctx context.Context, id, siteID, userID, filename, mimeType string, sizeBytes int64, storagePath, url string) (*Upload, error)
GetUpload(ctx context.Context, id string) (*Upload, error)
DeleteUpload(ctx context.Context, id string) error
ListUploads(ctx context.Context, siteID, userID string, limit, offset int) ([]Upload, error)
}
UploadStore handles file upload metadata.
type User ¶
type User struct {
ID string
SiteID string
Email string
PasswordHash sql.NullString
Role string
OAuthProvider sql.NullString
OAuthID sql.NullString
Name sql.NullString
AvatarURL sql.NullString
EmailVerified bool
VerifyToken sql.NullString
CreatedAt string
UpdatedAt string
LastLoginAt sql.NullString
}
User represents a user account.
func (*User) ToAuthInfo ¶
Helper to create user info from DB user
type UserStore ¶
type UserStore interface {
CreateUser(ctx context.Context, id, siteID, email, passwordHash, role, name string) (*User, error)
GetUserByID(ctx context.Context, id string) (*User, error)
GetUserByEmail(ctx context.Context, siteID, email string) (*User, error)
GetUserByOAuth(ctx context.Context, provider, providerID string) (*User, error)
ListUsers(ctx context.Context, siteID string) ([]User, error)
UpdateUserLastLogin(ctx context.Context, userID string) error
DeleteUser(ctx context.Context, id string) error
UpdateUser(ctx context.Context, id, email, role, name string) error
UpdateUserPassword(ctx context.Context, id, passwordHash string) error
CountUsers(ctx context.Context, siteID string) (int, error)
CountUsersByRole(ctx context.Context, siteID, role string) (int, error)
CreateUserWithVerification(ctx context.Context, id, siteID, email, passwordHash, role, name, verifyToken string) (*User, error)
GetUserByVerifyToken(ctx context.Context, token string) (*User, error)
VerifyUserEmail(ctx context.Context, userID string) error
CreateUserWithOAuth(ctx context.Context, id, siteID, email, oauthProvider, oauthID, name, avatarURL, role string) (*User, error)
LinkOAuthToUser(ctx context.Context, userID, oauthProvider, oauthID string) error
}
UserStore handles user account management.