mirror of
https://github.com/snowykami/neo-blog.git
synced 2025-09-04 00:06:22 +00:00
43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
package model
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/snowykami/neo-blog/pkg/constant"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type Like struct {
|
|
gorm.Model
|
|
TargetType string
|
|
TargetID uint
|
|
UserID uint
|
|
}
|
|
|
|
// AfterCreate 点赞后更新被点赞对象的计数
|
|
func (l *Like) AfterCreate(tx *gorm.DB) (err error) {
|
|
switch l.TargetType {
|
|
case constant.TargetTypePost:
|
|
return tx.Model(&Post{}).Where("id = ?", l.TargetID).
|
|
UpdateColumn("like_count", gorm.Expr("like_count + ?", 1)).Error
|
|
case constant.TargetTypeComment:
|
|
return tx.Model(&Comment{}).Where("id = ?", l.TargetID).
|
|
UpdateColumn("like_count", gorm.Expr("like_count + ?", 1)).Error
|
|
default:
|
|
return fmt.Errorf("不支持的目标类型: %s", l.TargetType)
|
|
}
|
|
}
|
|
|
|
// AfterDelete 取消点赞后更新被点赞对象的计数
|
|
func (l *Like) AfterDelete(tx *gorm.DB) (err error) {
|
|
switch l.TargetType {
|
|
case constant.TargetTypePost:
|
|
return tx.Model(&Post{}).Where("id = ?", l.TargetID).
|
|
UpdateColumn("like_count", gorm.Expr("GREATEST(like_count - ?, 0)", 1)).Error
|
|
case constant.TargetTypeComment:
|
|
return tx.Model(&Comment{}).Where("id = ?", l.TargetID).
|
|
UpdateColumn("like_count", gorm.Expr("GREATEST(like_count - ?, 0)", 1)).Error
|
|
default:
|
|
return fmt.Errorf("不支持的目标类型: %s", l.TargetType)
|
|
}
|
|
}
|