Skip to content

用户互相关注与屏蔽系统设计 #5

@codetalks-new

Description

@codetalks-new

关注和屏蔽操作不可少。本 issue 主要关注于用户之间的互相关注与 blocked.
这是一个多对多的操作。

一个用户对另一个用户的关联,主要就是“关注”或“屏蔽”。
使用一个枚举的表示这两种关系。

class UserRelationState(IntEnum):
  FOLLOWING = 1  # 关注
  BLOCKING = 4  # 屏蔽

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


_user_relation_state_to_text = {
  UserRelationState.FOLLOWING: "关注",
  UserRelationState.BLOCKING: "屏蔽"
}

在这个多对多的关系中,关注和屏蔽其实是互斥的,所以可以记录在同一条记录上。

class UserRelation(BaseModel):
  from_user = models.ForeignKey(WepostUser,on_delete=models.CASCADE,verbose_name="用户")
  to_user = models.ForeignKey(WepostUser,on_delete=models.CASCADE, verbose_name="目标用户")
  state = models.PositiveSmallIntegerField("状态", choices=UserRelationState.choices())

  class Meta:
    unique_together = ("from_user", "to_user")
    verbose_name = "关注与屏蔽"
    verbose_name_plural = verbose_name

由于同一个用户对另一个用户只维护一个关注,所以这里使用复合的索引 ,通过限定 from_user,to_user 的维护性,也是隐式的告诉数据库这里需要索引。

Metadata

Metadata

Assignees

No one assigned

    Labels

    用户关注用户互相关注相关设计及演进

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions