# 数据结构

某些关键的接口会返回通用的数据结构,如用户信息、文档明细、协作者等。

# 用户

/**
 * 用户信息
 */
export interface IflydocsUser {
  /** 文档用户 ID */
  uid: number
  nickname: string
  email: string
  mobile: string
  telephone: string
  realName: string
  headPhotoUrl: string
  sex: boolean
  birthday: null
  appId: string
  /** 业务用户 ID */
  appUserId: string
  updateTime: number
  registrationTime: number
}

# 权限明细

/**
 * 权限明细
 */
export interface IflydocsPermission {
  /** 查看 */
  read: boolean
  /** 编辑 */
  edit: boolean
  /** 批注 */
  annotate: boolean
  /** 评论 */
  comment: boolean
  /** 新建 */
  create: boolean
  /** 删除 */
  delete: boolean
  /** 分享 */
  share: boolean
  /** 导出 */
  export: boolean
  /** 移动 */
  move: boolean
  /** 拷贝 */
  copy: boolean
  /** 修改协作者 */
  updateCollaborator: boolean
  /** 修改管理员 */
  updateAdmin: boolean
  /** 转让 */
  transferSpace: boolean
  /** 收藏 */
  collection: boolean
  /** 置顶 */
  top: boolean
}

# 文件对象

/**
 * 文件对象
 */
export interface IflydocsDocument {
  /** 文件状态 */
  status: FsStatus
  /** 文件 ID */
  fid: string
  /** 应用 ID,需申请 */
  appId: string
  /** 文件名 */
  name: string
  /** 父文件夹 ID */
  parentFid: string
  /** 创建时间 */
  createTime: number
  /** 修改时间 */
  modifyTime: number
  /** 创建者 ID */
  creator: number
  /** 创建者名字 */
  creatorName: string
  /** 修改者 ID */
  modifier: number
  /** 修改者名字 */
  modifierName: string
  /** 拥有者 ID */
  owner: number
  /** 拥有者名字 */
  ownerName: string
  /** 文档类型 */
  docType: DocType
  /** 文件对象类型:文件或文件夹 */
  type: FsType
  /** 来源类型 */
  sourceType: SourceType
  /** 来源 ID */
  sourceId: string
  /** 后缀名 */
  suffix: string
  /** 文件类型 */
  fileType: FileType
  /** 协作状态 */
  collaborativeStatus: CollaborativeStatus
  /** 当前用户的角色类型 */
  role: RoleType
  /** 权限明细 */
  permissions: IflydocsPermission
  /** 元信息,只在 `fs/bs/fsFile` 接口返回 */
  metadata?: Record<string, any>
}

# 文件大小

export interface IflydocsFileSize {
  /** 文件字节大小,部分老数据可能返回 null */
  size: number | null
}

# 文件列表

/**
 * 文件列表
 * 包含分页信息,可以用来分段请求数据
 */
export interface IflydocsFileList<T = IflydocsDocument> {
  total: number
  pageCount: number
  count: number
  results: T[]
}

# 协作者角色

/**
 * 协作角色明细
 */
interface IflydocsRole {
  fid: string
  uid: number
  role: RoleType
  modifyTime: string
  nickName: string
  headPhotoUrl: string
  mobile: null | string
  isMine: boolean
  describe: string
  appUserId: string
}

# 协作者列表

/**
 * 文档协作者列表
 */
export interface IflydocsCollaborators {
  /** 继承自上级授权 */
  upper: IflydocsRole[]
  /** 直接授权 */
  direct: IflydocsRole[]
}

# 离线上传结果

/**
 * 离线上传处理结果
 */
export interface IflydocsOfflineUploadResult {
  detail: IflydocsDocument
  type: IflydocsOfflineUploadType
}

# 增量操作

/** 属性,加粗、斜体、字号等样式、以及标题、图片、表格等块。 */
interface AttributeMap {
  [key: string]: any
}

/** 插入操作 */
interface InsertOp {
  insert: string | object
  attributes?: AttributeMap
}

/** 保留操作,一般用于格式化 */
interface RetainOp {
  retain: number
  attributes?: AttributeMap
}

/** 删除操作 */
interface DeleteOp {
  delete: number
  attributes?: AttributeMap
}

/** 普通操作,包含三种类型 */
export type OP = InsertOp | RetainOp | DeleteOp

/** 文档内容,只有 InsertOp */
export type OP_DOC = InsertOp

# 文档内容

/**
 * 文档内容
 */
export interface IflydocsContent {
  /** 操作序列 */
  ops: OP_DOC[]
  /** 纯文本内容 */
  plain?: string
  /** 文档名称 */
  name: string
}

# 文件上传信息

/**
 * 云盘文件上传信息
 */
export interface IflydocsFileUploadInfo {
  /** 文件 ID */
  fid: string
  /** 上传链接 */
  safetyChain: string | null
  /** OSS 对象 ID */
  objectId: string
  /** 上传请求 ID,用于轮询上传结果 */
  requestId: string | null
}

# 文档导出进度

/**
 * 文档导出进度
 */
export interface IflydocsExportProcess {
  /** 导出请求 ID */
  exportRequestId: string
  /** 请求开始时间 */
  requestTime: number
  /** 导出任务状态 */
  status: IflydocsTaskStatus
  /** 导出文件类型 */
  exportFileType: IflydocsExportFileType
  /** 用户 ID */
  uid: number
  /** 导出文档 ID */
  fid: string
  /** 导出文件容器 */
  container: null | string
  /** 导出文件对象 ID */
  objectId: string
  /** 导出文件下载链接 */
  downloadSafetyChain: null | string
  /** 导出文件下载链接有效时间 */
  safetyChainEndTime: null | number
  /** 开始处理时间 */
  startProcessTime: null | number
  /** 结束处理时间 */
  overProcessTime: null | number
  /** 保留字段,暂未使用 */
  fastFailTime: null
}

# 文档导入进度

/**
 * 文档导入进度
 */
export interface IflydocsImportProcess {
  /** 导入请求 ID */
  requestId: string
  /** 请求开始时间 */
  requestTime: number
  /** 导入任务状态 */
  status: IflydocsTaskStatus
  /** 用户 ID */
  uid: number
  /** 导入目标文件夹 ID */
  fid: string
  /** 开始处理时间 */
  startProcessTime: number
  /** 结束处理时间 */
  overProcessTime: null | number
  /** 消息 */
  message: null | string
}