personchat.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. 'use strict';
  2. const assert = require('assert');
  3. // const _ = require('lodash');
  4. // const { ObjectId } = require('mongoose').Types;
  5. const { CrudService } = require('naf-framework-mongoose/lib/service');
  6. // const { BusinessError, ErrorCode } = require('naf-core').Error;
  7. const moment = require('moment');
  8. class PersonchatService extends CrudService {
  9. constructor(ctx) {
  10. super(ctx, 'chat');
  11. this.model = this.ctx.model.Personchat;
  12. }
  13. async create(query, { sender_id, sender_name, receiver_id, receiver_name, content, personroom_id }) {
  14. assert(sender_id, '缺少发送人信息');
  15. assert(content, '缺少发言内容');
  16. assert(receiver_id, '缺少接收人信息');
  17. assert(personroom_id, '缺少聊天房间信息');
  18. const send_time = moment().format('YYYY-MM-DD HH:mm:ss');
  19. const res = await this.model.create({
  20. sender_id,
  21. sender_name,
  22. receiver_id,
  23. receiver_name,
  24. content,
  25. personroom_id,
  26. send_time,
  27. });
  28. // TODO MQ
  29. const { mq } = this.ctx;
  30. if (mq) {
  31. const exchange = 'person_chat';
  32. const parm = {
  33. durable: true,
  34. headers: {
  35. sender_id,
  36. receiver_id,
  37. },
  38. };
  39. await mq.topic(
  40. exchange,
  41. personroom_id + '_' + receiver_id,
  42. JSON.stringify(res),
  43. parm
  44. );
  45. await mq.topic(
  46. 'chat_message',
  47. receiver_id,
  48. JSON.stringify(res),
  49. parm
  50. );
  51. }
  52. return res;
  53. }
  54. async received(data) {
  55. const { ids, sender_id, receiver_id, personroom_id } = data;
  56. for (const id of ids) {
  57. const chat = await this.model.findById(id);
  58. chat.status = '1';
  59. await chat.save();
  60. }
  61. const { mq } = this.ctx;
  62. if (mq) {
  63. const exchange = 'person_chat';
  64. const parm = {
  65. durable: true,
  66. headers: {
  67. sender_id,
  68. receiver_id,
  69. },
  70. };
  71. await mq.topic(
  72. exchange,
  73. personroom_id + '_' + receiver_id,
  74. '消息已查收',
  75. parm
  76. );
  77. }
  78. }
  79. }
  80. module.exports = PersonchatService;