添加阅读记录
(docId, uid int)
| 85 | |
| 86 | //添加阅读记录 |
| 87 | func (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 // 如果是更新,则阅读次数 |
nothing calls this directly
no test coverage detected