// 更新笔记 // [OK] func (c ApiNote) UpdateNote(noteOrContent info.ApiNote) revel.Result { re := info.NewReUpdate() noteUpdate := bson.M{} needUpdateNote := false noteId := noteOrContent.NoteId if noteOrContent.NoteId == "" { re.Msg = "noteIdNotExists" return c.RenderJson(re) } if noteOrContent.Usn <= 0 { re.Msg = "usnNotExists" return c.RenderJson(re) } // Log("_____________") // LogJ(noteOrContent) /* LogJ(c.Params.Files) LogJ(c.Request.Header) LogJ(c.Params.Values) */ // 先判断USN的问题, 因为很可能添加完附件后, 会有USN冲突, 这时附件就添错了 userId := c.getUserId() note := noteService.GetNote(noteId, userId) if note.NoteId == "" { re.Msg = "notExists" return c.RenderJson(re) } if note.Usn != noteOrContent.Usn { re.Msg = "conflict" Log("conflict") return c.RenderJson(re) } // 如果传了files // TODO 测试 /* for key, v := range c.Params.Values { Log(key) Log(v) } */ // Log(c.Has("Files[0]")) if c.Has("Files[0][LocalFileId]") { // LogJ(c.Params.Files) if noteOrContent.Files != nil && len(noteOrContent.Files) > 0 { for i, file := range noteOrContent.Files { if file.HasBody { if file.LocalFileId != "" { // FileDatas[54c7ae27d98d0329dd000000] ok, msg, fileId := c.upload("FileDatas["+file.LocalFileId+"]", noteId, file.IsAttach) if !ok { Log("upload file error") re.Ok = false if msg == "" { re.Msg = "fileUploadError" } else { re.Msg = msg } return c.RenderJson(re) } else { // 建立映射 file.FileId = fileId noteOrContent.Files[i] = file } } else { return c.RenderJson(re) } } } } // Log("after upload") // LogJ(noteOrContent.Files) } // 移到外面来, 删除最后一个file时也要处理, 不然总删不掉 // 附件问题, 根据Files, 有些要删除的, 只留下这些 attachService.UpdateOrDeleteAttachApi(noteId, userId, noteOrContent.Files) // Desc前台传来 if c.Has("Desc") { needUpdateNote = true noteUpdate["Desc"] = noteOrContent.Desc } /* if c.Has("ImgSrc") { needUpdateNote = true noteUpdate["ImgSrc"] = noteOrContent.ImgSrc } */ if c.Has("Title") { needUpdateNote = true noteUpdate["Title"] = noteOrContent.Title } if c.Has("IsTrash") { needUpdateNote = true noteUpdate["IsTrash"] = noteOrContent.IsTrash } // 是否是博客 if c.Has("IsBlog") { needUpdateNote = true noteUpdate["IsBlog"] = noteOrContent.IsBlog } /* Log(c.Has("tags[0]")) Log(c.Has("Tags[]")) for key, v := range c.Params.Values { Log(key) Log(v) } */ if c.Has("Tags[0]") { needUpdateNote = true noteUpdate["Tags"] = noteOrContent.Tags } if c.Has("NotebookId") { if bson.IsObjectIdHex(noteOrContent.NotebookId) { needUpdateNote = true noteUpdate["NotebookId"] = bson.ObjectIdHex(noteOrContent.NotebookId) } } if c.Has("Content") { // 通过内容得到Desc, 如果有Abstract, 则用Abstract生成Desc if noteOrContent.Abstract == "" { noteUpdate["Desc"] = SubStringHTMLToRaw(noteOrContent.Content, 200) } else { noteUpdate["Desc"] = SubStringHTMLToRaw(noteOrContent.Abstract, 200) } } noteUpdate["UpdatedTime"] = noteOrContent.UpdatedTime afterNoteUsn := 0 noteOk := false noteMsg := "" if needUpdateNote { noteOk, noteMsg, afterNoteUsn = noteService.UpdateNote(c.getUserId(), noteOrContent.NoteId, noteUpdate, noteOrContent.Usn) if !noteOk { re.Ok = false re.Msg = noteMsg return c.RenderJson(re) } } //------------- afterContentUsn := 0 contentOk := false contentMsg := "" if c.Has("Content") { // 把fileId替换下 c.fixPostNotecontent(¬eOrContent) // 如果传了Abstract就用之 if noteOrContent.Abstract == "" { noteOrContent.Abstract = SubStringHTML(noteOrContent.Content, 200, "") } // Log("--------> afte fixed") // Log(noteOrContent.Content) contentOk, contentMsg, afterContentUsn = noteService.UpdateNoteContent(c.getUserId(), noteOrContent.NoteId, noteOrContent.Content, noteOrContent.Abstract, needUpdateNote, noteOrContent.Usn, noteOrContent.UpdatedTime) } if needUpdateNote { re.Ok = noteOk re.Msg = noteMsg re.Usn = afterNoteUsn } else { re.Ok = contentOk re.Msg = contentMsg re.Usn = afterContentUsn } if !re.Ok { return c.RenderJson(re) } noteOrContent.Content = "" noteOrContent.Usn = re.Usn noteOrContent.UpdatedTime = time.Now() // Log("after upload") // LogJ(noteOrContent.Files) noteOrContent.UserId = c.getUserId() return c.RenderJson(noteOrContent) }
// 添加笔记 // [OK] func (c ApiNote) AddNote(noteOrContent info.ApiNote) revel.Result { userId := bson.ObjectIdHex(c.getUserId()) re := info.NewRe() myUserId := userId // 为共享新建? /* if noteOrContent.FromUserId != "" { userId = bson.ObjectIdHex(noteOrContent.FromUserId) } */ // Log(noteOrContent.Title) // LogJ(noteOrContent) /* LogJ(c.Params) for name, _ := range c.Params.Files { Log(name) file, _, _ := c.Request.FormFile(name) LogJ(file) } */ // return c.RenderJson(re) if noteOrContent.NotebookId == "" || !bson.IsObjectIdHex(noteOrContent.NotebookId) { re.Msg = "notebookIdNotExists" return c.RenderJson(re) } noteId := bson.NewObjectId() // TODO 先上传图片/附件, 如果不成功, 则返回false // attachNum := 0 if noteOrContent.Files != nil && len(noteOrContent.Files) > 0 { for i, file := range noteOrContent.Files { if file.HasBody { if file.LocalFileId != "" { // FileDatas[54c7ae27d98d0329dd000000] ok, msg, fileId := c.upload("FileDatas["+file.LocalFileId+"]", noteId.Hex(), file.IsAttach) if !ok { re.Ok = false if msg != "" { Log(msg) Log(file.LocalFileId) re.Msg = "fileUploadError" } // 报不是图片的错误没关系, 证明客户端传来非图片的数据 if msg != "notImage" { return c.RenderJson(re) } } else { // 建立映射 file.FileId = fileId noteOrContent.Files[i] = file if file.IsAttach { attachNum++ } } } else { return c.RenderJson(re) } } } } c.fixPostNotecontent(¬eOrContent) // Log("Add") // LogJ(noteOrContent) // return c.RenderJson(re) note := info.Note{UserId: userId, NoteId: noteId, NotebookId: bson.ObjectIdHex(noteOrContent.NotebookId), Title: noteOrContent.Title, Tags: noteOrContent.Tags, Desc: noteOrContent.Desc, // ImgSrc: noteOrContent.ImgSrc, IsBlog: noteOrContent.IsBlog, IsMarkdown: noteOrContent.IsMarkdown, AttachNum: attachNum, CreatedTime: noteOrContent.CreatedTime, UpdatedTime: noteOrContent.UpdatedTime, } noteContent := info.NoteContent{NoteId: note.NoteId, UserId: userId, IsBlog: note.IsBlog, Content: noteOrContent.Content, Abstract: noteOrContent.Abstract, CreatedTime: noteOrContent.CreatedTime, UpdatedTime: noteOrContent.UpdatedTime, } // 通过内容得到Desc, abstract if noteOrContent.Abstract == "" { note.Desc = SubStringHTMLToRaw(noteContent.Content, 200) noteContent.Abstract = SubStringHTML(noteContent.Content, 200, "") } else { note.Desc = SubStringHTMLToRaw(noteContent.Abstract, 200) } note = noteService.AddNoteAndContentApi(note, noteContent, myUserId) if note.NoteId == "" { re.Ok = false return c.RenderJson(re) } // 添加需要返回的 noteOrContent.NoteId = note.NoteId.Hex() noteOrContent.Usn = note.Usn noteOrContent.CreatedTime = note.CreatedTime noteOrContent.UpdatedTime = note.UpdatedTime noteOrContent.UserId = c.getUserId() noteOrContent.IsMarkdown = note.IsMarkdown // 删除一些不要返回的, 删除Desc? noteOrContent.Content = "" noteOrContent.Abstract = "" // apiNote := info.NoteToApiNote(note, noteOrContent.Files) return c.RenderJson(noteOrContent) }