| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- {db, ObjectId} = require "./mongojs"
- module.exports = SnapshotManager =
- recordSnapshot: (project_id, doc_id, version, pathname, lines, ranges, callback) ->
- try
- project_id = ObjectId(project_id)
- doc_id = ObjectId(doc_id)
- catch error
- return callback(error)
- db.docSnapshots.insert {
- project_id, doc_id, version, lines, pathname,
- ranges: SnapshotManager.jsonRangesToMongo(ranges),
- ts: new Date()
- }, callback
- # Suggested indexes:
- # db.docSnapshots.createIndex({project_id:1, doc_id:1})
- # db.docSnapshots.createIndex({ts:1},{expiresAfterSeconds: 30*24*3600)) # expires after 30 days
- jsonRangesToMongo: (ranges) ->
- return null if !ranges?
-
- updateMetadata = (metadata) ->
- if metadata?.ts?
- metadata.ts = new Date(metadata.ts)
- if metadata?.user_id?
- metadata.user_id = SnapshotManager._safeObjectId(metadata.user_id)
-
- for change in ranges.changes or []
- change.id = SnapshotManager._safeObjectId(change.id)
- updateMetadata(change.metadata)
- for comment in ranges.comments or []
- comment.id = SnapshotManager._safeObjectId(comment.id)
- if comment.op?.t?
- comment.op.t = SnapshotManager._safeObjectId(comment.op.t)
- updateMetadata(comment.metadata)
- return ranges
- _safeObjectId: (data) ->
- try
- return ObjectId(data)
- catch error
- return data
|