Skip to content

用户通知系统设计 #6

@codetalks-new

Description

@codetalks-new

在用户创建的主题回收回复,收到感谢,或者在一些回复中被 @ 了。需要通知用户。

数据模型设计

当前的通知类型有如下一些:

  • 收到回复
  • 收到@
  • 收到感谢
  • 创建主题被收藏
  • 关注的用户有了新动态
  • 关注的节点有了新主题

通知消息类别与位操作

这些用户又有不同的重要程度,用户应该可以忽略不重要的消息。
由于这些消息种类不是特别多。可以使用位运算方便后面操作与查询 。
使用 64 位的整型存储可以支持最多64种不同类型的通知。对于此类系统来说完全足够了。
一个用户要面对 64 个开关也是够了。

当前针对上面的通知类型,细化声明如下:

class NotificationCategory(IntFlag, EnumChoiceMixin):
  RECEIVE_REPLY = 1 << 0  # 收到回复
  RECEIVE_MENTION = 1 << 1  # 收到 @
  RECEIVE_REPLY_LIKE = 1 << 2  # 收到回复感谢
  RECEIVE_POST_LIKE = 1 << 3  # 收到主题感谢
  RECEIVE_REPLY_FAV = 1 << 4  # 收到回复被收藏
  RECEIVE_POST_FAV = 1 << 5  # 收到主题被收藏
  FOLLOWED_USER_NEW_REPLY = 1 << 6  # 关注用户有了新回复
  FOLLOWED_USER_NEW_POST = 1 << 7  # 关注用户创建了新主题
  FOLLOWED_POST_NEW_REPLY = 1 << 8  # 关注的主题有了新回复
  FOLLOWED_NODE_NEW_POST = 1 << 9  # 关注的节点有了新主题

  @property
  def label(self):
    return _notification_category_to_text[self]


_notification_category_to_text = {
  NotificationCategory.RECEIVE_REPLY: "收到回复",
  NotificationCategory.RECEIVE_MENTION: "收到@",
  NotificationCategory.RECEIVE_REPLY_LIKE: "收到回复感谢",
  NotificationCategory.RECEIVE_POST_LIKE: "收到主题感谢",
  NotificationCategory.RECEIVE_REPLY_FAV: "收到回复收藏",
  NotificationCategory.RECEIVE_POST_FAV: "收到主题收藏",
  NotificationCategory.FOLLOWED_USER_NEW_REPLY: "关注用户有了新回复",
  NotificationCategory.FOLLOWED_USER_NEW_POST: "关注用户创建了新主题",
  NotificationCategory.FOLLOWED_POST_NEW_REPLY: "关注的主题有了新回复",
  NotificationCategory.FOLLOWED_NODE_NEW_POST: "关注的节点有了新主题",

}

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions