index.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. const cloud = require('wx-server-sdk');
  2. cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });
  3. const db = cloud.database();
  4. // 用户注册(首次微信登录时调用)
  5. // 处理:创建用户记录 + 上下级关系绑定
  6. exports.main = async (event) => {
  7. const { referrerCode } = event;
  8. const { OPENID } = cloud.getWXContext();
  9. try {
  10. // 检查用户是否已存在
  11. const userRes = await db.collection('users').where({
  12. _openid: OPENID,
  13. }).get();
  14. if (userRes.data.length > 0) {
  15. return {
  16. code: 0,
  17. isNew: false,
  18. role: userRes.data[0].role || 'regular',
  19. message: '用户已存在',
  20. };
  21. }
  22. // 解析上级
  23. let invitedBy = null;
  24. if (referrerCode) {
  25. const refRes = await db.collection('users').where({
  26. referralCode,
  27. }).get();
  28. if (refRes.data.length > 0) {
  29. const refUser = refRes.data[0];
  30. // 不能自己邀请自己
  31. if (refUser._openid !== OPENID) {
  32. invitedBy = refUser._openid;
  33. // 更新上级的推广统计
  34. const stats = refUser.referralStats || {};
  35. await db.collection('users').doc(refUser._id).update({
  36. data: {
  37. 'referralStats.directCount': (stats.directCount || 0) + 1,
  38. },
  39. });
  40. }
  41. }
  42. }
  43. // 创建新用户
  44. const userData = {
  45. _openid: OPENID,
  46. role: 'regular',
  47. practitionerExpireAt: null,
  48. invitedBy,
  49. referralStats: {
  50. directCount: 0,
  51. indirectCount: 0,
  52. convertedCount: 0,
  53. },
  54. createdAt: db.serverDate(),
  55. updatedAt: db.serverDate(),
  56. };
  57. await db.collection('users').add({ data: userData });
  58. return {
  59. code: 0,
  60. isNew: true,
  61. role: 'regular',
  62. hasReferrer: !!invitedBy,
  63. };
  64. } catch (err) {
  65. return { code: 500, error: err.message };
  66. }
  67. };