Files
leanote/app/service/TrashService.go

138 lines
3.9 KiB
Go
Raw Permalink Normal View History

2014-05-07 13:06:24 +08:00
package service
import (
"github.com/leanote/leanote/app/db"
"github.com/leanote/leanote/app/info"
2015-11-13 17:58:41 +08:00
"gopkg.in/mgo.v2/bson"
2014-05-07 13:06:24 +08:00
)
// 回收站
// 可以移到noteSerice中
// 不能删除notebook, 如果其下有notes!
// 这样回收站里只有note
// 删除笔记后(或删除笔记本)后入回收站
// 把note, notebook设个标记即可!
// 已经在trash里的notebook, note不能是共享!, 所以要删除共享
type TrashService struct {
}
//---------------------
// 删除note
// 应该放在回收站里
// 有trashService
func (this *TrashService) DeleteNote(noteId, userId string) bool {
2015-11-13 17:58:41 +08:00
note := noteService.GetNote(noteId, userId)
2015-10-27 23:04:39 +08:00
// 如果是垃圾, 则彻底删除
2015-11-13 17:58:41 +08:00
if note.IsTrash {
2015-10-27 23:04:39 +08:00
return this.DeleteTrash(noteId, userId)
}
2014-05-07 13:06:24 +08:00
// 首先删除其共享
if shareService.DeleteShareNoteAll(noteId, userId) {
// 更新note isTrash = true
2015-03-31 14:27:26 +08:00
if db.UpdateByIdAndUserId(db.Notes, noteId, userId, bson.M{"$set": bson.M{"IsTrash": true, "Usn": userService.IncrUsn(userId)}}) {
2014-10-22 16:20:45 +08:00
// recount notebooks' notes number
notebookIdO := noteService.GetNotebookId(noteId)
notebookId := notebookIdO.Hex()
notebookService.ReCountNotebookNumberNotes(notebookId)
return true
}
2014-05-07 13:06:24 +08:00
}
2015-11-13 17:58:41 +08:00
2014-05-07 13:06:24 +08:00
return false
}
// 删除别人共享给我的笔记
// 先判断我是否有权限, 笔记是否是我创建的
2015-10-27 23:04:39 +08:00
func (this *TrashService) DeleteSharedNote(noteId, myUserId string) bool {
note := noteService.GetNoteById(noteId)
userId := note.UserId.Hex()
2014-05-07 13:06:24 +08:00
if shareService.HasUpdatePerm(userId, myUserId, noteId) && note.CreatedUserId.Hex() == myUserId {
2015-03-31 14:27:26 +08:00
return db.UpdateByIdAndUserId(db.Notes, noteId, userId, bson.M{"$set": bson.M{"IsTrash": true, "Usn": userService.IncrUsn(userId)}})
2014-05-07 13:06:24 +08:00
}
return false
}
// recover
func (this *TrashService) recoverNote(noteId, notebookId, userId string) bool {
2015-11-13 17:58:41 +08:00
re := db.UpdateByIdAndUserId(db.Notes, noteId, userId,
bson.M{"$set": bson.M{"IsTrash": false,
"Usn": userService.IncrUsn(userId),
2014-05-07 13:06:24 +08:00
"NotebookId": bson.ObjectIdHex(notebookId)}})
2015-11-13 17:58:41 +08:00
return re
2014-05-07 13:06:24 +08:00
}
// 删除trash
func (this *TrashService) DeleteTrash(noteId, userId string) bool {
2015-11-13 17:58:41 +08:00
note := noteService.GetNote(noteId, userId)
2015-03-31 14:27:26 +08:00
if note.NoteId == "" {
return false
}
2014-09-21 22:05:04 +08:00
// delete note's attachs
ok := attachService.DeleteAllAttachs(noteId, userId)
2015-03-31 14:27:26 +08:00
// 设置删除位
2015-11-13 17:58:41 +08:00
ok = db.UpdateByIdAndUserIdMap(db.Notes, noteId, userId,
bson.M{"IsDeleted": true,
2015-03-31 14:27:26 +08:00
"Usn": userService.IncrUsn(userId)})
2014-09-21 22:05:04 +08:00
// delete note
2015-11-13 17:58:41 +08:00
// ok = db.DeleteByIdAndUserId(db.Notes, noteId, userId)
2014-09-21 22:05:04 +08:00
// delete content
ok = db.DeleteByIdAndUserId(db.NoteContents, noteId, userId)
2015-11-13 17:58:41 +08:00
2015-11-28 14:22:10 +08:00
// 删除content history
ok = db.DeleteByIdAndUserId(db.NoteContentHistories, noteId, userId)
2015-03-31 14:27:26 +08:00
// 重新统计tag's count
// TODO 这里会改变tag's Usn
tagService.reCountTagCount(userId, note.Tags)
2015-11-13 17:58:41 +08:00
2014-09-21 22:05:04 +08:00
return ok
2014-05-07 13:06:24 +08:00
}
2015-03-31 14:27:26 +08:00
func (this *TrashService) DeleteTrashApi(noteId, userId string, usn int) (bool, string, int) {
note := noteService.GetNote(noteId, userId)
2015-11-13 17:58:41 +08:00
2015-03-31 14:27:26 +08:00
if note.NoteId == "" || note.IsDeleted {
return false, "notExists", 0
}
2015-11-13 17:58:41 +08:00
2015-03-31 14:27:26 +08:00
if note.Usn != usn {
return false, "conflict", 0
}
2015-11-13 17:58:41 +08:00
2015-03-31 14:27:26 +08:00
// delete note's attachs
ok := attachService.DeleteAllAttachs(noteId, userId)
// 设置删除位
afterUsn := userService.IncrUsn(userId)
2015-11-13 17:58:41 +08:00
ok = db.UpdateByIdAndUserIdMap(db.Notes, noteId, userId,
bson.M{"IsDeleted": true,
2015-03-31 14:27:26 +08:00
"Usn": afterUsn})
2015-11-13 17:58:41 +08:00
2015-03-31 14:27:26 +08:00
// delete content
ok = db.DeleteByIdAndUserId(db.NoteContents, noteId, userId)
2015-11-13 17:58:41 +08:00
2015-11-28 14:22:10 +08:00
// 删除content history
ok = db.DeleteByIdAndUserId(db.NoteContentHistories, noteId, userId)
// 一个BUG, iOS删除直接调用这个API, 结果没有重新recount
// recount notebooks' notes number
notebookService.ReCountNotebookNumberNotes(note.NotebookId.Hex())
2015-03-31 14:27:26 +08:00
return ok, "", afterUsn
}
2014-05-07 13:06:24 +08:00
// 列出note, 排序规则, 还有分页
// CreatedTime, UpdatedTime, title 来排序
2015-11-13 17:58:41 +08:00
func (this *TrashService) ListNotes(userId string,
pageNumber, pageSize int, sortField string, isAsc bool) (notes []info.Note) {
2014-05-07 13:06:24 +08:00
_, notes = noteService.ListNotes(userId, "", true, pageNumber, pageSize, sortField, isAsc, false)
return
2015-10-27 23:04:39 +08:00
}