index.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // 云函数入口文件
  2. const cloud = require('wx-server-sdk')
  3. cloud.init()
  4. const db = cloud.database()
  5. const _ = db.command
  6. const $ = db.command.aggregate
  7. // 云函数入口函数
  8. exports.main = async (event, context) => {
  9. const {
  10. OPENID
  11. } = cloud.getWXContext()
  12. if (event.manager) {
  13. const managers = await db.collection('manager')
  14. .aggregate()
  15. .match({
  16. user_id: OPENID
  17. })
  18. .skip(event.page_token)
  19. .limit(event.page_size)
  20. .lookup({
  21. from: 'publisher',
  22. localField: 'pub_id',
  23. foreignField: '_id',
  24. as: 'publisher'
  25. })
  26. .unwind('$publisher')
  27. .end()
  28. return {
  29. list: managers.list,
  30. next_page_token: event.page_token + managers.list.length,
  31. status: 'OK'
  32. }
  33. } else if (event.follow) {
  34. const publishers = await db.collection('publisher')
  35. .aggregate()
  36. .lookup({
  37. from: 'follow',
  38. let: {
  39. pub_id: '$_id'
  40. },
  41. pipeline: $.pipeline()
  42. .match(_.expr($.and([
  43. $.eq(['$user_id', OPENID]),
  44. $.eq(['$pub_id', '$$pub_id'])
  45. ])))
  46. .project({
  47. _id: 0,
  48. follow_time: 1
  49. }).done(),
  50. as: 'follow'
  51. })
  52. .unwind('$follow')
  53. .skip(event.page_token)
  54. .limit(event.page_size)
  55. .end()
  56. return {
  57. list: publishers.list,
  58. next_page_token: event.page_token + publishers.list.length,
  59. status: 'OK'
  60. }
  61. } else {
  62. const publishers = await db.collection('publisher')
  63. .aggregate()
  64. .skip(event.page_token)
  65. .limit(event.page_size)
  66. .end()
  67. return {
  68. list: publishers.list,
  69. next_page_token: event.page_token + publishers.list.length,
  70. status: 'OK'
  71. }
  72. }
  73. }