Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | 16x 16x 16x 16x 16x 16x 16x 3x 16x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 16x 16x 16x 9x 16x 16x | import Crowi from 'server/crowi' import { DeleteWriteOpResultObject } from 'mongodb' import { Types, Document, Model, Schema, model } from 'mongoose' import { PageDocument } from './page' // import Debug from 'debug' export interface RevisionDocument extends Document { _id: Types.ObjectId path: string body: string format: string author: Types.ObjectId createdAt: Date } export interface RevisionModel extends Model<RevisionDocument> { findLatestRevision(path: string, cb: (err: Error, data: RevisionDocument | null) => void): void findRevision(id: Types.ObjectId): Promise<RevisionDocument | null> findRevisions(ids): Promise<RevisionDocument[]> findRevisionIdList(path): Promise<RevisionDocument[]> findRevisionList(path, options): Promise<RevisionDocument[]> updateRevisionListByPath(path, updateData): Promise<RevisionDocument> prepareRevision(pageData: PageDocument, body, user, options?): RevisionDocument removeRevisionsByPath(path): Promise<DeleteWriteOpResultObject['result']> updatePath(pathName): void findAuthorsByPage(page): Promise<RevisionDocument['author'][]> } export default (crowi: Crowi) => { // const debug = Debug('crowi:models:revision') const revisionSchema = new Schema<RevisionDocument, RevisionModel>({ path: { type: String, required: true, index: true }, body: { type: String, required: true }, format: { type: String, default: 'markdown' }, author: { type: Schema.Types.ObjectId, ref: 'User' }, createdAt: { type: Date, default: Date.now }, }) revisionSchema.statics.findLatestRevision = function(path, cb) { this.findOne({ path }) .sort({ createdAt: -1 }) .exec(function(err, data) { cb(err, data) }) } revisionSchema.statics.findRevision = function(id) { return Revision.findById(id) .populate('author') .exec() } revisionSchema.statics.findRevisions = async function(ids) { if (!Array.isArray(ids)) { throw new Error('The argument was not Array.') } return Revision.find({ _id: { $in: ids } }) .sort({ createdAt: -1 }) .populate('author') .exec() } revisionSchema.statics.findRevisionIdList = function(path) { return Revision.find({ path: path }) .select('_id author createdAt') .sort({ createdAt: -1 }) .exec() } revisionSchema.statics.findRevisionList = function(path, options) { return Revision.find({ path: path }) .sort({ createdAt: -1 }) .populate('author') .exec() } revisionSchema.statics.updateRevisionListByPath = function(path, updateData) { return Revision.updateMany({ path: path }, { $set: updateData }).exec() } revisionSchema.statics.prepareRevision = function(pageData, body, user, options) { Iif (!options) { options = {} } const format = options.format || 'markdown' Iif (!user._id) { throw new Error('Error: user should have _id') } const newRevision = new Revision() newRevision.path = pageData.path newRevision.body = body newRevision.format = format newRevision.author = user._id newRevision.createdAt = (Date.now() as any) as Date return newRevision } revisionSchema.statics.removeRevisionsByPath = function(path) { return Revision.deleteMany({ path }).exec() } revisionSchema.statics.updatePath = function(pathName) {} revisionSchema.statics.findAuthorsByPage = function(page) { return Revision.distinct('author', { path: page.path }).exec() as Promise<RevisionDocument['author'][]> } const Revision = model<RevisionDocument, RevisionModel>('Revision', revisionSchema) return Revision } |