MCPcopy Index your code
hub / github.com/TruthHun/BookStack / Add

Method Add

models/read_record.go:87–189  ·  view source on GitHub ↗

添加阅读记录

(docId, uid int)

Source from the content-addressed store, hash-verified

85
86//添加阅读记录
87func (this *ReadRecord) Add(docId, uid int) (err error) {
88 // 1、根据文档id查询书籍id
89 // 2、写入或者更新阅读记录
90 // 3、更新书籍被阅读的文档统计
91 // 4、更新用户阅读时长
92 var (
93 doc Document
94 r ReadRecord
95 o = orm.NewOrm()
96 tableDoc = NewDocument()
97 member = NewMember()
98 now = time.Now()
99 rt = NewReadingTime()
100 )
101
102 err = o.QueryTable(tableDoc).Filter("document_id", docId).One(&doc, "book_id")
103 if err != nil {
104 beego.Error(err)
105 return
106 }
107
108 if doc.BookId <= 0 {
109 return
110 }
111
112 record := ReadRecord{
113 BookId: doc.BookId,
114 DocId: docId,
115 Uid: uid,
116 CreateAt: int(now.Unix()),
117 }
118
119 // 更新书架中的书籍最后的阅读时间
120 go new(Star).SetLastReadTime(uid, doc.BookId)
121
122 // 计算奖励的阅读时长
123 readingTime, lastReadDocId := this.calcReadingTime(uid, docId, now)
124 // 如果现在阅读的文档id与上次阅读的文档id相同,则不更新阅读时长
125 if lastReadDocId == docId {
126 return
127 }
128
129 o.Begin()
130 defer func() {
131 if err != nil {
132 o.Rollback()
133 beego.Error(err)
134 } else {
135 o.Commit()
136 }
137 }()
138
139 o.QueryTable(tableReadRecord).Filter("doc_id", docId).Filter("uid", uid).One(&r, "id")
140
141 readCnt := 1
142 if r.Id > 0 { // 先删再增,以便根据主键id索引的倒序查询列表
143 o.QueryTable(tableReadRecord).Filter("id", r.Id).Delete()
144 readCnt = 0 // 如果是更新,则阅读次数

Callers

nothing calls this directly

Calls 8

calcReadingTimeMethod · 0.95
NewDocumentFunction · 0.85
NewMemberFunction · 0.85
NewReadingTimeFunction · 0.85
SetLastReadTimeMethod · 0.80
DeleteMethod · 0.45
InsertMethod · 0.45
UpdateMethod · 0.45

Tested by

no test coverage detected