2017-04-22 17:24:17 +08:00
package models
import (
"time"
"github.com/astaxie/beego/orm"
"strings"
2017-04-24 18:25:17 +08:00
"github.com/astaxie/beego/logs"
2017-04-25 20:05:59 +08:00
"github.com/lifei6671/godoc/conf"
2017-04-22 17:24:17 +08:00
)
type BookResult struct {
BookId int ` json:"book_id" `
BookName string ` json:"book_name" `
Identify string ` json:"identify" `
OrderIndex int ` json:"order_index" `
Description string ` json:"description" `
PrivatelyOwned int ` json:"privately_owned" `
PrivateToken string ` json:"private_token" `
DocCount int ` json:"doc_count" `
CommentStatus string ` json:"comment_status" `
CommentCount int ` json:"comment_count" `
CreateTime time . Time ` json:"create_time" `
CreateName string ` json:"create_name" `
ModifyTime time . Time ` json:"modify_time" `
Cover string ` json:"cover" `
Label string ` json:"label" `
MemberId int ` json:"member_id" `
2017-04-26 18:17:38 +08:00
Editor string ` json:"editor" `
2017-04-24 18:25:17 +08:00
RelationshipId int ` json:"relationship_id" `
2017-04-22 17:24:17 +08:00
RoleId int ` json:"role_id" `
RoleName string ` json:"role_name" `
2017-04-23 20:33:21 +08:00
Status int
2017-04-22 17:24:17 +08:00
LastModifyText string ` json:"last_modify_text" `
}
func NewBookResult ( ) * BookResult {
return & BookResult { }
}
2017-04-24 18:25:17 +08:00
// 根据项目标识查询项目以及指定用户权限的信息.
2017-04-22 17:24:17 +08:00
func ( m * BookResult ) FindByIdentify ( identify string , member_id int ) ( * BookResult , error ) {
2017-04-28 18:08:01 +08:00
if identify == "" || member_id <= 0 {
return m , ErrInvalidParameter
}
2017-04-22 17:24:17 +08:00
o := orm . NewOrm ( )
book := NewBook ( )
err := o . QueryTable ( book . TableNameWithPrefix ( ) ) . Filter ( "identify" , identify ) . One ( book )
if err != nil {
return m , err
}
relationship := NewRelationship ( )
2017-04-26 18:17:38 +08:00
err = o . QueryTable ( relationship . TableNameWithPrefix ( ) ) . Filter ( "book_id" , book . BookId ) . Filter ( "member_id" , member_id ) . One ( relationship )
2017-04-22 17:24:17 +08:00
if err != nil {
2017-04-26 18:17:38 +08:00
return m , err
2017-04-22 17:24:17 +08:00
}
var relationship2 Relationship
2017-04-26 18:17:38 +08:00
err = o . QueryTable ( relationship . TableNameWithPrefix ( ) ) . Filter ( "book_id" , book . BookId ) . Filter ( "role_id" , 0 ) . One ( & relationship2 )
2017-04-22 17:24:17 +08:00
if err != nil {
2017-04-26 18:17:38 +08:00
logs . Error ( "根据项目标识查询项目以及指定用户权限的信息 => " , err )
return m , ErrPermissionDenied
2017-04-22 17:24:17 +08:00
}
member := NewMember ( )
err = member . Find ( relationship2 . MemberId )
if err != nil {
2017-04-26 18:17:38 +08:00
return m , err
2017-04-22 17:24:17 +08:00
}
2017-04-26 18:17:38 +08:00
m . BookId = book . BookId
m . BookName = book . BookName
m . Identify = book . Identify
m . OrderIndex = book . OrderIndex
m . Description = strings . Replace ( book . Description , "\r\n" , "<br/>" , - 1 )
m . PrivatelyOwned = book . PrivatelyOwned
m . PrivateToken = book . PrivateToken
m . DocCount = book . DocCount
m . CommentStatus = book . CommentStatus
m . CommentCount = book . CommentCount
m . CreateTime = book . CreateTime
m . CreateName = member . Account
m . ModifyTime = book . ModifyTime
m . Cover = book . Cover
m . Label = book . Label
m . Status = book . Status
m . Editor = book . Editor
m . MemberId = relationship . MemberId
m . RoleId = relationship . RoleId
m . RelationshipId = relationship . RelationshipId
2017-04-22 17:24:17 +08:00
2017-04-25 20:05:59 +08:00
if m . RoleId == conf . BookFounder {
2017-04-22 17:24:17 +08:00
m . RoleName = "创始人"
2017-04-26 18:17:38 +08:00
} else if m . RoleId == conf . BookAdmin {
2017-04-22 17:24:17 +08:00
m . RoleName = "管理员"
2017-04-26 18:17:38 +08:00
} else if m . RoleId == conf . BookEditor {
2017-04-22 17:24:17 +08:00
m . RoleName = "编辑者"
2017-04-26 18:17:38 +08:00
} else if m . RoleId == conf . BookObserver {
2017-04-22 17:24:17 +08:00
m . RoleName = "观察者"
}
doc := NewDocument ( )
2017-04-26 18:17:38 +08:00
err = o . QueryTable ( doc . TableNameWithPrefix ( ) ) . Filter ( "book_id" , book . BookId ) . OrderBy ( "modify_time" ) . One ( doc )
2017-04-22 17:24:17 +08:00
if err == nil {
member2 := NewMember ( )
member2 . Find ( doc . ModifyAt )
m . LastModifyText = member2 . Account + " 于 " + doc . ModifyTime . Format ( "2006-01-02 15:04:05" )
}
2017-04-26 18:17:38 +08:00
return m , nil
2017-04-22 17:24:17 +08:00
}
2017-04-24 18:25:17 +08:00
func ( m * BookResult ) FindToPager ( pageIndex , pageSize int ) ( books [ ] * BookResult , totalCount int , err error ) {
o := orm . NewOrm ( )
count , err := o . QueryTable ( NewBook ( ) . TableNameWithPrefix ( ) ) . Count ( )
if err != nil {
return
}
totalCount = int ( count )
sql := "SELECT book.*,rel.relationship_id,rel.role_id,m.account AS create_name FROM md_books AS book LEFT JOIN md_relationship AS rel ON rel.book_id = book.book_id AND rel.role_id = 0 LEFT JOIN md_members AS m ON rel.member_id = m.member_id ORDER BY book.order_index DESC ,book.book_id DESC LIMIT ?,?"
offset := ( pageIndex - 1 ) * pageSize
_ , err = o . Raw ( sql , offset , pageSize ) . QueryRows ( & books )
return
}