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
| 'use strict';
const Service = require('egg').Service; const mongoose = require('mongoose'); const dayjs = require('dayjs'); module.exports = app => { class CommentService extends Service {
async createComment(data) { const { from, to, content, book, parentId } = data; const result = await this.ctx.model.Comment.create({ from, to, content, book, parent_id: parentId ? mongoose.Types.ObjectId(parentId) : 0, create_time: dayjs().unix(), }); return result ? app.config.msg.CREARE_SUCCESS : app.config.msg.CREARE_ERR; }
async findComment(data) { const { book, page, pageSize } = data const totalNum = await this.ctx.model.Comment.find({ book: mongoose.Types.ObjectId(book), parent_id: 0 }).countDocuments(); const oneList = await this.ctx.model.Comment.find({ book: mongoose.Types.ObjectId(book), parent_id: 0 }) .populate({ path: 'from', select: { name: 1, image: 1, _id: 1 } }) .populate({ path: 'to', select: { name: 1, image: 1, _id: 1 } }) .sort({ create_time: 1}) .skip((parseInt(page) - 1) * parseInt(pageSize)) .limit(parseInt(pageSize)).lean(); const Comment = this.ctx.model.Comment var promises = oneList.map(item => { return Comment.find({ book: mongoose.Types.ObjectId(book), parent_id: item._id }) .populate({ path: 'from', select: { name: 1, image: 1, _id: 1 } }) .populate({ path: 'to', select: { name: 1, image: 1, _id: 1 } }) .sort({ create_time: 1}) .select('-__v').lean() }); var list = await Promise.all(promises) oneList.forEach(item => { item.items = [] list.forEach(code => { if (code.length > 0 && item._id == code[0].parent_id) { item.items = code } }) }) return oneList ? { bean: { records: oneList, current: page, size: oneList.length, total: totalNum, }, ...app.config.msg.GET_SUCCESS } : app.config.msg.GET_ERR; } } return CommentService; };
|