Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【删除回收】回收站展示 #908

Closed
Canway-shiisa opened this issue Feb 7, 2023 · 11 comments
Closed

【删除回收】回收站展示 #908

Canway-shiisa opened this issue Feb 7, 2023 · 11 comments
Assignees
Labels
canway 需求来源为嘉为侧 doing 已经接受处理,正在开发实施 Priority: High
Milestone

Comments

@Canway-shiisa
Copy link
Contributor

回收站功能

  • 展示列表
    • 已经删除后被放入回收站的数据需要进行展示:包括删除的目录、删除的用户、删除的组织
    • 搜索框过滤展示

相关原型:

  • 最近删除目录:
    回收箱_最近删除目录
  • 最近删除用户:
    回收箱_最近删除用户
  • 最近删除组织:
    回收箱_最近删除组织
@Canway-shiisa Canway-shiisa changed the title 【删除回收】回收站功能 【删除回收】回收站展示 Feb 7, 2023
@neronkl
Copy link
Contributor

neronkl commented Feb 7, 2023

1.设计思路
回收站为一个单独功能,新建一个模块。目录(category),组织(department),人员(profile)保留原有的删除的基础上,增加映射关系作为回收站的数据内容。在web模块建立其视图模块.
image

Recycle Bin 模型设置

字段 数据类型 释义
object_type char 删除对象类型【category,department,profile】
object_id int 所删除对象id
status char 数据状态(soft_deleted/hard_deleted /reverted)
operator char 操作人

2.接口设计

2.1 功能说明:回收站数据展示(目录)

URL: "api/v1/web/recycle_bin/category/?keyword=..."

Method: GET

query_parmas:

字段 数据 释义
keyword char 搜索关键词

Response:

字段 数据 释义
id int 回收站id
category json 目录基础信息
department_count int 部门数
profile_count int 人员数
operator char 操作人
expires int 离过期剩余天数

2.2 功能说明:回收站数据展示(人员)

URL: "api/v1/web/recycle_bin/profile/?keyword=..."

query_parmas:

字段 数据 释义
keyword char 搜索关键词

Method: GET

字段 数据 释义
id int 回收站id
category_display_name char 所属目录名称
profile json 基础信息
departments list 所属部门
operator char 操作人
expires int 离过期剩余天数

2.3 功能说明:回收站数据展示(组织)

URL: "api/v1/web/recycle_bin/department/?keyword=..."

query_parmas:

字段 数据 释义
keyword char 搜索关键词

Method: GET

字段 数据 释义
id int 回收站id
department json 部门基础信息
category_display_name char 所属目录名称
profile_count int 用户数
operator char 操作人
expires int 离过期剩余天数

回收站视图

class RecycleBinOutputBaseSerializer:
    id, operator, expires
    
    def get_expires():
        #  create_at + 删除策略配置的天数
        
class RecycleBinCategoryOutputSLZ(RecycleBinOutputBaseSerializer):
    profile_count
    department_count
     # category 基本信息
    
class RecycleBinDepartmentOutputSLZ(RecycleBinOutputBaseSerializer):
    profile_count
    category
    # department 基本信息
    
class RecycleBinProfileOutputSLZ(RecycleBinOutputBaseSerializer):
    category
    # profile 基本信息
        
class RecycleBinSearchInputSlZ():
    keyword

url: path("recycle_bin/category/")
class RecycleBinCategoryListApi(generics.ListAPIView):
	serializer = RecycleBinCategoryOutputSLZ
    
    def list(...):
        input_slz = RecycleBinSearchInputSlZ(...)
        # 过滤对象
        # 筛选映射关系
	
     
url: path("recycle_bin/department/")
class RecycleBinDepartmentListApi(generics.ListAPIView):
    serializer = RecycleBinDepartmentOutputSLZ
    
    def list(...):
        input_slz = RecycleBinSearchInputSlZ(...)
        # 过滤对象
        # 筛选映射关系


url: path("recycle_bin/profile/")
class RecycleBinProfileListApi(generics.ListAPIView):
    serializer = RecycleBinProfileOutputSLZ
    
    def list(...):
        input_slz = RecycleBinSearchInputSlZ(...)
        # 过滤对象
        # 筛选映射关系

@neronkl
Copy link
Contributor

neronkl commented Feb 7, 2023

@Canway-shiisa

@Canway-shiisa
Copy link
Contributor Author

Canway-shiisa commented Feb 8, 2023

数据模型设计:

  1. 回收站命名 =》recycle_bin?
  2. object_status 字段没有存在的必要?放进回收站的数据就是暂存的数据,还原或永久删除的时候均可以将数据从数据表中删掉,只要审计记录完整即可
  3. enabled字段的作用是?

逻辑设计:

  1. 展示接口 应该还有返回一个过期时间
  2. 最近删除用户和最近删除组织的接口返回的是所属目录,不是目录类型
  3. 这里统一成一个接口似乎不太合适,可以将共用的数据抽象在一个serializer让三个接口的序列化器分别继承?

@neronkl
Copy link
Contributor

neronkl commented Feb 9, 2023

  1. recycling_bin = > recycle_bin
  2. object_status, enabled 两个字段表示映射关系的有效性,限制同一对象还原和软删除状态来回切换,重复生成删除相同的数据,使用这两字段进行标识会更合理。定时任务中进行清理删除状态的映射关系。
  3. 响应增加字段:过期时间 => expired_time(或者前端可否计算?)
  4. profile,department 的 output_slz中的目录类型 => 所属目录 category_name
  5. profile, department,category,统一接口进行分离为三个独立接口,使用对应的input_slz和output_slz
    @Canway-shiisa

@Canway-shiisa
Copy link
Contributor Author

  1. 这里即使 用status来对回收站数据进行标识,status似乎只需要两种,一个是暂存态,一个是还原态,永久删除的话 数据都从目录表、部门表和用户表中硬删除了,在回收站中也没有存储的必要?
  2. enabled的作用还是不是很明确,即使是定时任务 执行的是对回收站的数据进行硬删除,这个字段似乎也没啥作用?
  3. 过期时间前后端都可以计算,后台加一个属性计算,前端计算的话 需要调用多一个过期策略的接口获取数据保留天数
  4. 所属目录的命名感觉可以优化一下,看看from_category合适不?

@neronkl
Copy link
Contributor

neronkl commented Feb 9, 2023

  1. 去掉enabled字段,保留status的两种状态,手动硬删除以及定时硬删除 => 物理删除映射关系
  2. 离过期剩余天数,后台计算进行返回:remain_days
  3. category_name => from_category
    @Canway-shiisa

@Canway-shiisa
Copy link
Contributor Author

@wklken 辛苦亮哥review下, 方案没问题的话可以开始开发 @neronkl

@wklken
Copy link
Collaborator

wklken commented Feb 9, 2023

方案讨论完直接 edit 原来的方案 或者整理完重发一个 => 避免其他人得看所有信息流

@wklken
Copy link
Collaborator

wklken commented Feb 9, 2023

逻辑:

  1. 软删除, 对象状态变更 + 回收站加一条记录 A 谁/什么时间/什么对象 soft_deleted
  2. 展示
  3. 硬删除 => 标注hard_deleting 异步任务或同步删除后, 直接删除记录 A, 记录审计日志
  4. 还原 => 标注 reverting 异步任务或同步还原后, 直接删除记录 A, 记录审计日志

根据上面总结 A 记录的生命周期

  1. URL 中 recycling_bin = > recycle_bin

  2. URL 遵循restful /api/v1/web/recycle_bin/types/[category | profile | department] 是一个接口, 支持三种类型

  3. id / object_type / object_id / operator / deleted_at

  4. 搜索接口 /api/v1/web/recycle_bin/search/?type=x&keyword= keyword到后台再根据类型决定检索什么字段

  5. 接口返回

  • expires = deleted_at + 删除策略配置的天数
  • 原则: 尽量跟各自模块的 detail slz 字段名保持一致, 不要用 from_category / department_relate 之类的
    • 目录: 返回 id + operator + expires + category基本信息 + profile_count + department_count
    • 人员: 返回 id + operator + expires + 人员基本信息
    • 部门: 返回 id + operator + expires + 部门基本信息(里面有祖先和孩子节点)

@nannan00
Copy link
Collaborator

image

应该是3个接口,这3个接口的输入和返回都不一样,否则会导致一个接口,多输入多输出的情况

搜索接口,应该是上面查询接口,多个输入参数而已

image

应该不需要deleted_at,model应该都会继承TimestampedModel,直接使用 expires = created_at + 删除策略配置的天数

@neronkl
Copy link
Contributor

neronkl commented Feb 16, 2023

image

应该是3个接口,这3个接口的输入和返回都不一样,否则会导致一个接口,多输入多输出的情况
搜索接口,应该是上面查询接口,多个输入参数而已

image

应该不需要deleted_at,model应该都会继承TimestampedModel,直接使用 expires = created_at + 删除策略配置的天数

在原方案上,根据建议已经进行修改 @wklken @nannan00

@Canway-shiisa Canway-shiisa added this to the Y2023M09 milestone Feb 27, 2023
@Shutulee Shutulee modified the milestones: Y2023M09, Y2023M10 Mar 6, 2023
@nannan00 nannan00 modified the milestones: Y2023M10, Y2023M11 Mar 13, 2023
neronkl added a commit to neronkl/bk-user that referenced this issue Mar 14, 2023
初始化全局配置(回收策略),新增回收站展示视图

feat TencentBlueKing#908
neronkl added a commit to neronkl/bk-user that referenced this issue Mar 14, 2023
初始化全局配置(回收策略),新增回收站展示策略

feat TencentBlueKing#908
@Canway-shiisa Canway-shiisa added the canway 需求来源为嘉为侧 label Mar 28, 2023
@Canway-shiisa Canway-shiisa reopened this Mar 28, 2023
@Canway-shiisa Canway-shiisa modified the milestones: Y2023M11, Y2023M13 Mar 28, 2023
@Canway-shiisa Canway-shiisa added doing 已经接受处理,正在开发实施 Priority: High labels Mar 28, 2023
nannan00 pushed a commit that referenced this issue Apr 3, 2023
* feat(bkuser_core, bkuser_core/api/web): 新增回收站展示视图

初始化全局配置(回收策略),新增回收站展示策略

feat #908
@nannan00 nannan00 modified the milestones: Y2023M13, Y2023M14 Apr 3, 2023
@nannan00 nannan00 assigned yuri0528 and unassigned wklken Apr 3, 2023
@Shutulee Shutulee modified the milestones: Y2023M14, Y2023M15 Apr 10, 2023
yuri0528 pushed a commit to yuri0528/bk-user that referenced this issue Jun 27, 2023
* feat(bkuser_core, bkuser_core/api/web): 新增回收站展示视图

初始化全局配置(回收策略),新增回收站展示策略

feat TencentBlueKing#908
yuri0528 pushed a commit to yuri0528/bk-user that referenced this issue Jun 27, 2023
* feat(bkuser_core, bkuser_core/api/web): 新增回收站展示视图

初始化全局配置(回收策略),新增回收站展示策略

feat TencentBlueKing#908
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
canway 需求来源为嘉为侧 doing 已经接受处理,正在开发实施 Priority: High
Projects
None yet
Development

No branches or pull requests

6 participants