2022-08-24 05:55:19 +00:00
|
|
|
package models
|
|
|
|
|
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"gorm.io/gorm"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Comment table - in forum threads, on profiles or photos, etc.
|
|
|
|
type Comment struct {
|
|
|
|
ID uint64 `gorm:"primaryKey"`
|
|
|
|
TableName string `gorm:"index"`
|
|
|
|
TableID uint64 `gorm:"index"`
|
|
|
|
UserID uint64 `gorm:"index"`
|
|
|
|
User User
|
|
|
|
Message string
|
|
|
|
CreatedAt time.Time
|
|
|
|
UpdatedAt time.Time
|
|
|
|
}
|
|
|
|
|
|
|
|
// Preload related tables for the forum (classmethod).
|
|
|
|
func (c *Comment) Preload() *gorm.DB {
|
|
|
|
return DB.Preload("User.ProfilePhoto")
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetComment by ID.
|
|
|
|
func GetComment(id uint64) (*Comment, error) {
|
|
|
|
c := &Comment{}
|
|
|
|
result := c.Preload().First(&c, id)
|
|
|
|
return c, result.Error
|
|
|
|
}
|
|
|
|
|
2022-08-26 02:58:43 +00:00
|
|
|
// GetComments queries a set of comment IDs and returns them mapped.
|
|
|
|
func GetComments(IDs []uint64) (map[uint64]*Comment, error) {
|
|
|
|
var (
|
|
|
|
mt = map[uint64]*Comment{}
|
|
|
|
ts = []*Comment{}
|
|
|
|
)
|
|
|
|
|
|
|
|
result := (&Comment{}).Preload().Where("id IN ?", IDs).Find(&ts)
|
|
|
|
for _, row := range ts {
|
|
|
|
mt[row.ID] = row
|
|
|
|
}
|
|
|
|
|
|
|
|
return mt, result.Error
|
|
|
|
}
|
|
|
|
|
2022-08-24 05:55:19 +00:00
|
|
|
// AddComment about anything.
|
|
|
|
func AddComment(user *User, tableName string, tableID uint64, message string) (*Comment, error) {
|
|
|
|
c := &Comment{
|
|
|
|
TableName: tableName,
|
|
|
|
TableID: tableID,
|
|
|
|
User: *user,
|
|
|
|
Message: message,
|
|
|
|
}
|
|
|
|
result := DB.Create(c)
|
|
|
|
return c, result.Error
|
|
|
|
}
|
|
|
|
|
|
|
|
// PaginateComments provides a page of comments on something.
|
|
|
|
func PaginateComments(user *User, tableName string, tableID uint64, pager *Pagination) ([]*Comment, error) {
|
|
|
|
var (
|
|
|
|
cs = []*Comment{}
|
|
|
|
query = (&Comment{}).Preload()
|
|
|
|
)
|
|
|
|
|
|
|
|
query = query.Where(
|
|
|
|
"table_name = ? AND table_id = ?",
|
|
|
|
tableName, tableID,
|
|
|
|
).Order(pager.Sort)
|
|
|
|
|
|
|
|
query.Model(&Comment{}).Count(&pager.Total)
|
|
|
|
result := query.Offset(pager.GetOffset()).Limit(pager.PerPage).Find(&cs)
|
|
|
|
return cs, result.Error
|
|
|
|
}
|
|
|
|
|
|
|
|
// Save a comment.
|
|
|
|
func (c *Comment) Save() error {
|
|
|
|
return DB.Save(c).Error
|
|
|
|
}
|
|
|
|
|
|
|
|
// Delete a comment.
|
|
|
|
func (c *Comment) Delete() error {
|
|
|
|
return DB.Delete(c).Error
|
|
|
|
}
|