Skip to content

Commit d0e27bd

Browse files
committed
feat(hole): admins can freeze a hole which can't update latest time
1 parent 4f8a9c2 commit d0e27bd

File tree

4 files changed

+24
-7
lines changed

4 files changed

+24
-7
lines changed

apis/hole/apis.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -603,11 +603,19 @@ func ModifyHole(c *fiber.Ctx) error {
603603
MyLog("Hole", "Modify", holeID, user.ID, RoleAdmin, "Lock: ")
604604
}
605605

606+
// modify frozen
607+
if body.Frozen != nil {
608+
changed = true
609+
hole.Frozen = *body.Frozen
610+
611+
MyLog("Hole", "Modify", holeID, user.ID, RoleAdmin, "Frozen: ")
612+
}
613+
606614
// save
607615
if changed {
608616
err = tx.Model(&hole).
609617
Omit(clause.Associations, "UpdatedAt").
610-
Select("DivisionID", "Hidden", "Locked").
618+
Select("DivisionID", "Hidden", "Locked", "Frozen").
611619
Updates(&hole).Error
612620
if err != nil {
613621
return err
@@ -624,6 +632,7 @@ func ModifyHole(c *fiber.Ctx) error {
624632
"division_id": hole.DivisionID,
625633
"hidden": hole.Hidden,
626634
"locked": hole.Locked,
635+
"frozen": hole.Frozen,
627636
"tags": hole.Tags,
628637
},
629638
Modify: body,

apis/hole/schemas.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ type ModifyModel struct {
8989
Hidden *bool `json:"hidden"` // Admin only
9090
Unhidden *bool `json:"unhidden"` // admin only
9191
Lock *bool `json:"lock"` // admin only
92+
Frozen *bool `json:"frozen"` // admin only
9293
}
9394

9495
func (body ModifyModel) CheckPermission(user *models.User, hole *models.Hole) error {
@@ -110,9 +111,12 @@ func (body ModifyModel) CheckPermission(user *models.User, hole *models.Hole) er
110111
if body.Lock != nil && !user.IsAdmin {
111112
return common.Forbidden("非管理员禁止锁定帖子")
112113
}
114+
if body.Frozen != nil && !user.IsAdmin {
115+
return common.Forbidden("非管理员禁止冻结帖子")
116+
}
113117
return nil
114118
}
115119

116120
func (body ModifyModel) DoNothing() bool {
117-
return body.Hidden == nil && body.Unhidden == nil && body.Tags == nil && body.DivisionID == nil && body.Lock == nil
121+
return body.Hidden == nil && body.Unhidden == nil && body.Tags == nil && body.DivisionID == nil && body.Lock == nil && body.Frozen == nil
118122
}

models/floor.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -357,11 +357,12 @@ func (floor *Floor) Create(tx *gorm.DB, hole *Hole, c *fiber.Ctx) (err error) {
357357
return err
358358
}
359359

360-
// update hole reply and update_at
361-
return tx.Model(&hole).
362-
Omit(clause.Associations).
363-
Select("Reply").
364-
Updates(&hole).Error
360+
// update hole reply, skip UpdatedAt if frozen
361+
query := tx.Model(&hole).Omit(clause.Associations).Select("Reply")
362+
if hole.Frozen {
363+
query = query.Omit("UpdatedAt")
364+
}
365+
return query.Updates(&hole).Error
365366
})
366367

367368
if err != nil {

models/hole.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ type Hole struct {
3838
// 锁定帖子,如果锁定则非管理员无法发帖,也无法修改已有发帖
3939
Locked bool `json:"locked" gorm:"not null;default:false"`
4040

41+
// 冻结帖子,如果冻结则发帖不会更新 UpdatedAt
42+
Frozen bool `json:"frozen" gorm:"not null;default:false"`
43+
4144
Good bool `json:"good" gorm:"not null;default:false"`
4245

4346
NoPurge bool `json:"no_purge" gorm:"not null;default:false"`

0 commit comments

Comments
 (0)