📜  设计删除闪存消息 (1)

📅  最后修改于: 2023-12-03 14:57:39.930000             🧑  作者: Mango

设计删除闪存消息

简介

本文介绍了设计一个删除闪存消息功能所需考虑的方面,以及如何实现它。在这个功能中,用户可以删除他们之前发布的任何闪存消息。

功能需求
  • 用户可以删除他们之前发布的任何闪存消息。
  • 删除后,其他用户将无法查看该消息,并且不应出现在任何地方(例如搜索结果中)。
  • 删除操作不可逆。
  • 用户需要进行身份验证,以确保只有作者才能删除该消息。
  • 提供必要的错误处理和错误提示。
数据库设计

在实现此功能之前,需要设计数据库以存储闪存消息。下面是一些参考:

Column       | Type     | Constraints
-------------|----------|------------
id           | int      | PRIMARY KEY
content      | text     | NOT NULL
created_at   | datetime |
updated_at   | datetime |
author_id    | int      | REFERENCES users(id)

接下来,我们需要添加一个删除标志。这样就可以单独标记来自一个用户的多个闪存消息。

Column       | Type     | Constraints
-------------|----------|------------
id           | int      | PRIMARY KEY
content      | text     | NOT NULL
created_at   | datetime |
updated_at   | datetime |
author_id    | int      | REFERENCES users(id)
deleted      | bool     | DEFAULT false
deleted_at   | datetime |
API 设计

首先,我们需要确保用户已经登录才能删除他们发布的消息。因此,我们需要在 API 中添加身份验证。

DELETE /posts/:id
Authorization: Bearer xxxxxx
  • :id - 表示将要删除的闪存消息的 ID。
  • Authorization - 表示用户 token,确保该用户有权删除该消息。

在 API 中,执行删除操作的代码如下:

def delete_post(id, current_user):
    post = get_post(id)

    if post is None:
        raise NotFoundError()

    if post.author_id != current_user.id:
        raise ForbiddenError()

    post.deleted_at = datetime.utcnow()
    post.deleted = True
    db.session.commit()
前端设计

最后,我们需要在前端中实现删除闪存消息功能。代码如下:

const removePost = async (postId) => {
  try {
    await axios.delete(`/posts/${postId}`, { headers: { 'Authorization': `Bearer ${token}` } })
    notifySuccess('The post was removed successfully.')
  } catch (err) {
    handleError(err)
  }
}
  • postId - 要删除的闪存消息的 ID。
  • token - 用于身份验证的用户 token。
  • axios - 用于执行 http 请求的 JavaScript 库。
总结

在本文中,我们介绍了设计删除闪存消息功能所需考虑的方面,以及如何实现它。该功能不仅方便用户删除错误或不适当的内容,还有助于保持系统的整洁性。