lib/wechat/work/we_drive/file_acl.ex

defmodule WeChat.Work.WeDrive.FileACL do
  @moduledoc "微盘-文件权限"

  import Jason.Helpers
  import WeChat.Utils, only: [work_doc_link_prefix: 0]
  alias WeChat.Work
  alias Work.Contacts.User
  alias Work.WeDrive.FileManagement

  @doc_link "#{work_doc_link_prefix()}/90135/93658"
  @agent :we_drive
  @type auth_info :: [map]
  @typedoc """
  权限范围

  - `1`: 指定人
  - `2`: 企业内
  - `3`: 企业外
  """
  @type auth_scope :: 1..3
  @typedoc """
  权限信息

  ## 普通文档
    `1`: 仅浏览(可下载)
    `4`: 仅预览(仅专业版企业可设置)

  ## 微文档:
    `1`: 仅浏览(可下载)
    `2`: 可编辑
  """
  @type auth :: integer

  @doc """
  新增指定人
  - [官方文档](#{@doc_link}#新增指定人){:target="_blank"}
  """
  @spec add(Work.client(), User.userid(), FileManagement.file_id(), auth_info) ::
          WeChat.response()
  def add(client, userid, file_id, auth_info) do
    client.post(
      "/cgi-bin/wedrive/file_acl_add",
      json_map(userid: userid, fileid: file_id, auth_info: auth_info),
      query: [access_token: client.get_access_token(@agent)]
    )
  end

  @doc """
  删除指定人
  - [官方文档](#{@doc_link}#删除指定人){:target="_blank"}
  """
  @spec delete(Work.client(), User.userid(), FileManagement.file_id(), auth_info) ::
          WeChat.response()
  def delete(client, userid, file_id, auth_info) do
    client.post(
      "/cgi-bin/wedrive/file_acl_del",
      json_map(userid: userid, fileid: file_id, auth_info: auth_info),
      query: [access_token: client.get_access_token(@agent)]
    )
  end

  @doc """
  分享设置
  - [官方文档](#{@doc_link}#分享设置){:target="_blank"}
  """
  @spec setting(Work.client(), User.userid(), FileManagement.file_id(), auth_scope, auth) ::
          WeChat.response()
  def setting(client, userid, file_id, auth_scope, auth) do
    client.post(
      "/cgi-bin/wedrive/file_setting",
      json_map(userid: userid, fileid: file_id, auth_scope: auth_scope, auth: auth),
      query: [access_token: client.get_access_token(@agent)]
    )
  end

  @doc """
  获取分享链接
  - [官方文档](#{@doc_link}#获取分享链接){:target="_blank"}
  """
  @spec share(Work.client(), User.userid(), FileManagement.file_id()) :: WeChat.response()
  def share(client, userid, file_id) do
    client.post(
      "/cgi-bin/wedrive/file_share",
      json_map(userid: userid, fileid: file_id),
      query: [access_token: client.get_access_token(@agent)]
    )
  end
end