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 | 16x 16x 16x 16x 16x 3x 16x 16x 9x 16x 3x 3x 3x 3x 3x 3x 3x 16x 16x | import Crowi from 'server/crowi'
import { Types, Document, Model, Schema, model } from 'mongoose'
import Debug from 'debug'
export interface CommentDocument extends Document {
_id: Types.ObjectId
page: Types.ObjectId | any
creator: Types.ObjectId
revision: Types.ObjectId
comment: string
commentPosition: number
createdAt: Date
}
export interface CommentModel extends Model<CommentDocument> {
getCommentsByPageId(id: Types.ObjectId): Promise<CommentDocument[]>
getCommentsByRevisionId(id: Types.ObjectId): Promise<CommentDocument[]>
countCommentByPageId(page: any): Promise<number>
removeCommentsByPageId(pageId: Types.ObjectId): Promise<void>
findCreatorsByPage(page: any): Promise<any[]>
}
export default (crowi: Crowi) => {
const debug = Debug('crowi:models:comment')
const commentSchema = new Schema<CommentDocument, CommentModel>({
page: { type: Schema.Types.ObjectId, ref: 'Page', index: true },
creator: { type: Schema.Types.ObjectId, ref: 'User', index: true },
revision: { type: Schema.Types.ObjectId, ref: 'Revision', index: true },
comment: { type: String, required: true },
commentPosition: { type: Number, default: -1 },
createdAt: { type: Date, default: Date.now },
})
commentSchema.statics.getCommentsByPageId = function(id) {
return Comment.find({ page: id })
.sort({ createdAt: -1 })
.populate('creator')
.exec()
}
commentSchema.statics.getCommentsByRevisionId = function(id) {
return Comment.find({ revision: id })
.sort({ createdAt: -1 })
.populate('creator')
.exec()
}
commentSchema.statics.countCommentByPageId = function(page) {
return Comment.countDocuments({ page }).exec()
}
commentSchema.statics.removeCommentsByPageId = async function(pageId) {
await Comment.deleteMany({ page: pageId }).exec()
}
commentSchema.statics.findCreatorsByPage = function(page) {
return Comment.distinct('creator', { page }).exec()
}
/**
* post save hook
*/
commentSchema.post('save', function(savedComment: CommentDocument) {
var Page = crowi.model('Page')
var Activity = crowi.model('Activity')
Comment.countCommentByPageId(savedComment.page)
.then(function(count) {
return Page.updateCommentCount(savedComment.page, count)
})
.then(function(page) {
debug('CommentCount Updated', page)
})
.catch(function() {})
Activity.createByPageComment(savedComment)
.then(function(activityLog) {
debug('Activity created', activityLog)
})
.catch(function(err) {})
})
const Comment = model<CommentDocument, CommentModel>('Comment', commentSchema)
return Comment
}
|