mindoc/models/comment.go

138 lines
3.5 KiB
Go
Raw Normal View History

2017-04-21 18:20:35 +08:00
package models
import (
"errors"
"time"
"github.com/beego/beego/v2/adapter/orm"
"github.com/mindoc-org/mindoc/conf"
)
2017-04-21 18:20:35 +08:00
//Comment struct
type Comment struct {
CommentId int `orm:"pk;auto;unique;column(comment_id)" json:"comment_id"`
Floor int `orm:"column(floor);type(unsigned);default(0)" json:"floor"`
BookId int `orm:"column(book_id);type(int)" json:"book_id"`
2017-04-21 18:20:35 +08:00
// DocumentId 评论所属的文档.
DocumentId int `orm:"column(document_id);type(int)" json:"document_id"`
2017-04-21 18:20:35 +08:00
// Author 评论作者.
Author string `orm:"column(author);size(100)" json:"author"`
2017-04-21 18:20:35 +08:00
//MemberId 评论用户ID.
MemberId int `orm:"column(member_id);type(int)" json:"member_id"`
2017-04-21 18:20:35 +08:00
// IPAddress 评论者的IP地址
IPAddress string `orm:"column(ip_address);size(100)" json:"ip_address"`
2017-04-21 18:20:35 +08:00
// 评论日期.
CommentDate time.Time `orm:"type(datetime);column(comment_date);auto_now_add" json:"comment_date"`
2017-04-21 18:20:35 +08:00
//Content 评论内容.
Content string `orm:"column(content);size(2000)" json:"content"`
// Approved 评论状态0 待审核/1 已审核/2 垃圾评论/ 3 已删除
Approved int `orm:"column(approved);type(int)" json:"approved"`
2017-04-21 18:20:35 +08:00
// UserAgent 评论者浏览器内容
UserAgent string `orm:"column(user_agent);size(500)" json:"user_agent"`
2017-04-21 18:20:35 +08:00
// Parent 评论所属父级
ParentId int `orm:"column(parent_id);type(int);default(0)" json:"parent_id"`
AgreeCount int `orm:"column(agree_count);type(int);default(0)" json:"agree_count"`
AgainstCount int `orm:"column(against_count);type(int);default(0)" json:"against_count"`
2017-04-21 18:20:35 +08:00
}
// TableName 获取对应数据库表名.
func (m *Comment) TableName() string {
return "comments"
}
2017-04-21 18:20:35 +08:00
// TableEngine 获取数据使用的引擎.
func (m *Comment) TableEngine() string {
return "INNODB"
}
func (m *Comment) TableNameWithPrefix() string {
return conf.GetDatabasePrefix() + m.TableName()
}
func NewComment() *Comment {
return &Comment{}
}
func (m *Comment) Find(id int) (*Comment, error) {
if id <= 0 {
return m, ErrInvalidParameter
}
o := orm.NewOrm()
err := o.Read(m)
2017-05-01 19:12:52 +08:00
return m, err
}
func (m *Comment) Update(cols ...string) error {
o := orm.NewOrm()
_, err := o.Update(m, cols...)
return err
}
//Insert 添加一条评论.
func (m *Comment) Insert() error {
if m.DocumentId <= 0 {
return errors.New("评论文档不存在")
}
if m.Content == "" {
return ErrCommentContentNotEmpty
}
o := orm.NewOrm()
if m.CommentId > 0 {
comment := NewComment()
//如果父评论不存在
if err := o.Read(comment); err != nil {
return err
}
}
document := NewDocument()
//如果评论的文档不存在
if _, err := document.Find(m.DocumentId); err != nil {
return err
}
book, err := NewBook().Find(document.BookId)
//如果评论的项目不存在
2017-04-25 20:05:59 +08:00
if err != nil {
return err
}
//如果已关闭评论
if book.CommentStatus == "closed" {
return ErrCommentClosed
}
if book.CommentStatus == "registered_only" && m.MemberId <= 0 {
return ErrPermissionDenied
}
//如果仅参与者评论
if book.CommentStatus == "group_only" {
if m.MemberId <= 0 {
return ErrPermissionDenied
}
rel := NewRelationship()
if _, err := rel.FindForRoleId(book.BookId, m.MemberId); err != nil {
return ErrPermissionDenied
}
}
if m.MemberId > 0 {
member := NewMember()
//如果用户不存在
if _, err := member.Find(m.MemberId); err != nil {
return ErrMemberNoExist
}
//如果用户被禁用
if member.Status == 1 {
return ErrMemberDisabled
}
} else if m.Author == "" {
m.Author = "[匿名用户]"
}
m.BookId = book.BookId
_, err = o.Insert(m)
return err
}