|
2 | 2 |
|
3 | 3 | const config = require('../config')
|
4 | 4 | const logger = require('../logger')
|
5 |
| -const { Note, User } = require('../models') |
| 5 | +const { Note, User, Revision } = require('../models') |
6 | 6 |
|
7 | 7 | const { newCheckViewPermission, errorForbidden, responseCodiMD, errorNotFound, errorInternalError } = require('../response')
|
8 | 8 | const { updateHistory, historyDelete } = require('../history')
|
9 | 9 | const { actionPublish, actionSlide, actionInfo, actionDownload, actionPDF, actionGist, actionRevision, actionPandoc } = require('./noteActions')
|
10 | 10 | const realtime = require('../realtime/realtime')
|
| 11 | +const moment = require('moment') |
11 | 12 |
|
12 | 13 | async function getNoteById (noteId, { includeUser } = { includeUser: false }) {
|
13 | 14 | const id = await Note.parseNoteIdAsync(noteId)
|
@@ -281,13 +282,37 @@ const updateNote = async (req, res) => {
|
281 | 282 | return errorNotFound(req, res)
|
282 | 283 | }
|
283 | 284 |
|
| 285 | + if (realtime.isNoteExistsInPool(noteId)) { |
| 286 | + logger.error('Update note failed: There are online users opening this note.') |
| 287 | + return res.status('403').send({ status: 'error', message: 'Update API can only be used when no users is online' }) |
| 288 | + } |
| 289 | + |
| 290 | + const now = Date.now() |
| 291 | + const content = req.body.content |
284 | 292 | const updated = await note.update({
|
285 |
| - content: req.body.content |
| 293 | + content: content, |
| 294 | + lastchangeAt: moment(now).format('YYYY-MM-DD HH:mm:ss'), |
| 295 | + authorship: [ |
| 296 | + [ |
| 297 | + req.user.id, |
| 298 | + 0, |
| 299 | + content.length, |
| 300 | + now, |
| 301 | + now |
| 302 | + ] |
| 303 | + ] |
286 | 304 | })
|
| 305 | + |
287 | 306 | if (!updated) {
|
288 |
| - logger.error('Update note failed: Write data error.') |
| 307 | + logger.error('Update note failed: Write note content error.') |
289 | 308 | return errorInternalError(req, res)
|
290 | 309 | }
|
| 310 | + |
| 311 | + Revision.saveNoteRevision(note, (err, revision) => { |
| 312 | + if (err) return errorInternalError(req, res) |
| 313 | + if (!revision) return errorNotFound(req, res) |
| 314 | + }) |
| 315 | + |
291 | 316 | res.send({
|
292 | 317 | status: 'ok'
|
293 | 318 | })
|
|
0 commit comments