| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import loggerFactory from '~/utils/logger';
- // disable no-return-await for model functions
- /* eslint-disable no-return-await */
- module.exports = function(crowi) {
- // eslint-disable-next-line no-unused-vars
- const logger = loggerFactory('growi:models:revision');
- const mongoose = require('mongoose');
- const mongoosePaginate = require('mongoose-paginate-v2');
- // allow empty strings
- mongoose.Schema.Types.String.checkRequired(v => v != null);
- const ObjectId = mongoose.Schema.Types.ObjectId;
- const revisionSchema = new mongoose.Schema({
- // OBSOLETE path: { type: String, required: true, index: true }
- pageId: { type: ObjectId, required: true, index: true },
- body: {
- type: String,
- required: true,
- get: (data) => {
- // replace CR/CRLF to LF above v3.1.5
- // see https://github.com/weseek/growi/issues/463
- return data ? data.replace(/\r\n?/g, '\n') : '';
- },
- },
- format: { type: String, default: 'markdown' },
- author: { type: ObjectId, ref: 'User' },
- hasDiffToPrev: { type: Boolean },
- }, {
- timestamps: { createdAt: true, updatedAt: false },
- });
- revisionSchema.plugin(mongoosePaginate);
- revisionSchema.statics.updateRevisionListByPageId = async function(pageId, updateData) {
- return this.updateMany({ pageId }, { $set: updateData });
- };
- revisionSchema.statics.prepareRevision = function(pageData, body, previousBody, user, options) {
- const Revision = this;
- if (!options) {
- // eslint-disable-next-line no-param-reassign
- options = {};
- }
- const format = options.format || 'markdown';
- if (!user._id) {
- throw new Error('Error: user should have _id');
- }
- const newRevision = new Revision();
- newRevision.pageId = pageData._id;
- newRevision.body = body;
- newRevision.format = format;
- newRevision.author = user._id;
- if (pageData.revision != null) {
- newRevision.hasDiffToPrev = body !== previousBody;
- }
- return newRevision;
- };
- return mongoose.model('Revision', revisionSchema);
- };
|