lib/wechat/work/meeting.ex

defmodule WeChat.Work.Meeting do
  @moduledoc "会议"

  import Jason.Helpers
  alias WeChat.Work
  alias Work.Contacts.User

  @typedoc "会议ID"
  @type meeting_id :: String.t()
  @type meeting_id_list :: [meeting_id]

  @doc """
  创建预约会议 -
  [官方文档](https://developer.work.weixin.qq.com/document/path/99104){:target="_blank"}
  """
  @spec create(Work.client(), Work.agent(), body :: map) :: WeChat.response()
  def create(client, agent, body) do
    client.post("/cgi-bin/meeting/create", body,
      query: [access_token: client.get_access_token(agent)]
    )
  end

  @doc """
  修改预约会议 -
  [官方文档](https://developer.work.weixin.qq.com/document/path/99047){:target="_blank"}
  """
  @spec update(Work.client(), Work.agent(), body :: map) :: WeChat.response()
  def update(client, agent, body) do
    client.post("/cgi-bin/meeting/update", body,
      query: [access_token: client.get_access_token(agent)]
    )
  end

  @doc """
  获取会议详情 -
  [官方文档](https://developer.work.weixin.qq.com/document/path/99049){:target="_blank"}
  """
  @spec get_info(Work.client(), Work.agent(), meeting_id) :: WeChat.response()
  def get_info(client, agent, meeting_id) do
    client.post("/cgi-bin/meeting/get_info", json_map(meetingid: meeting_id),
      query: [access_token: client.get_access_token(agent)]
    )
  end

  @doc """
  取消预约会议 -
  [官方文档](https://developer.work.weixin.qq.com/document/path/99048){:target="_blank"}
  """
  @spec cancel(Work.client(), Work.agent(), meeting_id) :: WeChat.response()
  def cancel(client, agent, meeting_id) do
    client.post("/cgi-bin/meeting/cancel", json_map(meetingid: meeting_id),
      query: [access_token: client.get_access_token(agent)]
    )
  end

  @doc """
  获取成员会议ID列表 -
  [官方文档](https://developer.work.weixin.qq.com/document/path/99050){:target="_blank"}

  通过此接口可以获取指定成员指定时间内的所有会议ID
  """
  @spec list_user_meeting_ids(
          Work.client(),
          Work.agent(),
          User.userid(),
          opts :: Enumerable.t()
        ) :: WeChat.response()
  def list_user_meeting_ids(client, agent, userid, opts \\ []) do
    body = Map.new(opts) |> Map.put("userid", userid)

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