user_message_model.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /**
  2. * 用户消息业务逻辑
  3. *
  4. * @author CaiAoLin
  5. * @date 2017/9/22
  6. * @version
  7. */
  8. const BaseModel = require('../../common/base/base_model');
  9. const MessageModel = require('./message_model');
  10. const mongoose = require('mongoose');
  11. class UserMessageModel extends BaseModel {
  12. /**
  13. * 构造函数
  14. *
  15. * @return {void}
  16. */
  17. constructor() {
  18. let parent = super();
  19. parent.model = mongoose.model('user_message');
  20. parent.init();
  21. }
  22. /**
  23. * 初始化用户消息
  24. *
  25. * @param {String} userId
  26. * @return {boolean}
  27. */
  28. async initMessage(userId) {
  29. userId = userId.toString();
  30. let result = true;
  31. // 获取最后一条消息的信息
  32. let option = {pageSize: 1, offset: 0};
  33. option.sort = {create_time: -1};
  34. let lastMessageData = await this.db.find({user_id: userId}, null, option);
  35. lastMessageData = lastMessageData === null || lastMessageData.length <= 0 ? null : lastMessageData[0];
  36. let lastTime = lastMessageData === null ? 0 : lastMessageData.create_time;
  37. // 查找已发布的数据
  38. let messageModel = new MessageModel();
  39. let messageData = await messageModel.getListByTime(lastTime);
  40. if (messageData === null) {
  41. return result;
  42. }
  43. // 组合新增数据
  44. let insertData = [];
  45. let currentTime = new Date().getTime();
  46. for(let message of messageData) {
  47. let tmp = {
  48. message: message._id,
  49. user_id: userId,
  50. create_time: currentTime
  51. };
  52. insertData.push(tmp);
  53. }
  54. result = await this.db.create(insertData);
  55. return result;
  56. }
  57. /**
  58. * 获取列表
  59. *
  60. * @param {String} userId
  61. * @param {Number} pageSize
  62. * @param {Object} sort
  63. * @return {promise}
  64. */
  65. async getList(userId, pageSize = 15, sort = {}) {
  66. let option = {pageSize: pageSize, offset: 0};
  67. option.sort = sort;
  68. let messageList = await this.db.findWithPopulate({user_id: userId, is_delete: 0}, null, option, 'message');
  69. messageList = messageList.length > 0 ? messageList : [];
  70. return messageList;
  71. }
  72. /**
  73. * 获取详细数据
  74. *
  75. * @param {String} userId
  76. * @param {String} id
  77. * @return {Promise}
  78. */
  79. async getDetail(userId, id) {
  80. let result = {};
  81. let messageList = await this.db.findWithPopulate({user_id: userId, is_delete: 0, _id: id}, null, null, 'message');
  82. if (messageList === null) {
  83. return result;
  84. }
  85. result = messageList.length > 0 ? messageList[0] : result;
  86. // 如果是未读数据则更改状态
  87. if (result.is_read === 0) {
  88. let updateData = {is_read: 1};
  89. await this.db.update({_id: id}, updateData);
  90. }
  91. return result;
  92. }
  93. /**
  94. * 设置全部已读
  95. *
  96. * @param {String} userId
  97. * @return {Promise}
  98. */
  99. async setAllRead(userId) {
  100. let updateData = {is_read: 1};
  101. return await this.db.update({user_id: userId}, updateData)
  102. }
  103. }
  104. module.exports = UserMessageModel;