message.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. const Message = require('./schemas/message');
  2. const getList = async (
  3. userId,
  4. { sortBy, sortByDesc, filter, limit = '500', page = '1', sub }
  5. ) => {
  6. const options = { owner: userId };
  7. if (sub) options.subscription = { $all: [sub] };
  8. const results = await Message.paginate(options, {
  9. limit,
  10. page,
  11. sort: {
  12. ...(sortBy ? { [`${sortBy}`]: 1 } : {}),
  13. ...(sortByDesc ? { [`${sortByDesc}`]: -1 } : {}),
  14. },
  15. select: filter ? filter.split('|').join(' ') : '',
  16. populate: {
  17. path: 'owner',
  18. select: '_id',
  19. },
  20. });
  21. const { docs: messages, totalDocs: total } = results;
  22. return { total: total.toString(), limit, page, messages };
  23. };
  24. const getListById = async (companionId, userId) => {
  25. const messages = await Message.find({
  26. companionId,
  27. owner: userId,
  28. });
  29. return messages;
  30. };
  31. const getById = async (id, userId) => {
  32. const foundMessage = await Message.findById({
  33. _id: id,
  34. owner: userId,
  35. });
  36. return foundMessage;
  37. };
  38. const getByField = async (number, userId) => {
  39. const message = await Message.findOne({
  40. number,
  41. owner: userId,
  42. });
  43. return message;
  44. };
  45. const add = async (obj) => {
  46. const message = await Message.create(obj);
  47. return message;
  48. };
  49. const remove = async (id, userId) => {
  50. const removedMessage = await Message.findByIdAndRemove({
  51. _id: id,
  52. owner: userId,
  53. });
  54. return removedMessage;
  55. };
  56. const removeAll = async (companionId, userId) => {
  57. const removedAllMessages = await Message.remove({
  58. companionId,
  59. owner: userId,
  60. });
  61. return removedAllMessages;
  62. };
  63. module.exports = {
  64. getList,
  65. getListById,
  66. getByField,
  67. getById,
  68. add,
  69. remove,
  70. removeAll,
  71. };