lib/wechat/work/we_drive/space_acl.ex

defmodule WeChat.Work.WeDrive.SpaceACL do
  @moduledoc "微盘-空间权限"

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

  @doc_link "#{work_doc_link_prefix()}/90135/93656"
  @agent :we_drive
  @type auth_info :: [map]

  @doc """
  添加成员/部门
  - [官方文档](#{@doc_link}#新建空间){:target="_blank"}
  """
  @spec add(Work.client(), User.userid(), SpaceManagement.space_id(), auth_info) ::
          WeChat.response()
  def add(client, userid, space_id, auth_info) do
    client.post(
      "/cgi-bin/wedrive/space_acl_add",
      json_map(userid: userid, spaceid: space_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(), SpaceManagement.space_id(), auth_info) ::
          WeChat.response()
  def delete(client, userid, space_id, auth_info) do
    client.post(
      "/cgi-bin/wedrive/space_acl_del",
      json_map(userid: userid, spaceid: space_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(), SpaceManagement.space_id(), opts :: Enumerable.t()) ::
          WeChat.response()
  def setting(client, userid, space_id, opts) do
    body = Map.new(opts) |> Map.merge(%{userid: userid, spaceid: space_id})

    client.post("/cgi-bin/wedrive/space_setting", body,
      query: [access_token: client.get_access_token(@agent)]
    )
  end

  @doc """
  获取邀请链接
  - [官方文档](#{@doc_link}#获取邀请链接){:target="_blank"}
  """
  @spec share(Work.client(), User.userid(), SpaceManagement.space_id()) :: WeChat.response()
  def share(client, userid, space_id) do
    client.post("/cgi-bin/wedrive/space_share", json_map(userid: userid, spaceid: space_id),
      query: [access_token: client.get_access_token(@agent)]
    )
  end
end