From 3a4948d590530a37e8a25071f7003778ba4c1251 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Mon, 17 Feb 2025 17:30:42 +0800 Subject: [PATCH] :sparkles: Collapse post according to flag, view ratio --- pkg/internal/models/posts.go | 1 + pkg/internal/services/flags.go | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/pkg/internal/models/posts.go b/pkg/internal/models/posts.go index 090919c..c374f4e 100644 --- a/pkg/internal/models/posts.go +++ b/pkg/internal/models/posts.go @@ -52,6 +52,7 @@ type Post struct { PinnedAt *time.Time `json:"pinned_at"` LockedAt *time.Time `json:"locked_at"` + IsCollapsed bool `json:"is_collapsed"` IsDraft bool `json:"is_draft"` PublishedAt *time.Time `json:"published_at"` PublishedUntil *time.Time `json:"published_until"` diff --git a/pkg/internal/services/flags.go b/pkg/internal/services/flags.go index c29d5f7..d458002 100644 --- a/pkg/internal/services/flags.go +++ b/pkg/internal/services/flags.go @@ -19,5 +19,21 @@ func NewFlag(post models.Post, account uint) (models.PostFlag, error) { if err := database.C.Save(&flag).Error; err != nil { return flag, err } + if err := FlagCalculateCollapseStatus(post); err != nil { + return flag, err + } return flag, nil } + +func FlagCalculateCollapseStatus(post models.Post) error { + collapseLimit := 0.5 + + var flagCount int64 + if err := database.C.Model(&models.PostFlag{}).Where("post_id = ?", post.ID).Count(&flagCount).Error; err != nil { + return err + } + if float64(flagCount)/float64(post.TotalViews) >= collapseLimit { + return database.C.Model(&post).Update("is_collapsed", true).Error + } + return nil +}