Current section

Files

Jump to
google_calendar lib calendar event.ex
Raw

lib/calendar/event.ex

defmodule GoogleCalendar.Event do
@moduledoc """
Interact with google events
Check list of optons in `https://developers.google.com/google-apps/calendar/v3/reference/events`
# Access client which contains token from session if you have put it into session previously
client = get_session(conn, "client")
# Config your event variable. Event is `Map`/ `Nested Map` type
event = %{calendar_id: "YOUR CALENDAR ID", id: "YOUR EVENT ID"}
# Additional event information are included in event if you want to insert, update, or path
event = %{
calendar_id: "YOUR CALENDAR ID",
id: "YOUR EVENT ID",
start: %{
date_time: "2017-08-20T05:20:00Z",
timezone: "UTC"
}
}
# Add query parameter to opts.Opts is `Keyword` type
opts = [params: [maxResults: 5]]
GoogleCalendar.Event.get(client, event, opts)
# Return result will be either `{:ok, action, result}` or `{:error, code, error_message}`
"""
import GoogleCalendar.Response
OAuth2.Client
@base_url "#{Application.get_env(:google_calendar, :base_url)}/calendars"
@content_type Application.get_env(:google_calendar, :content_type)
@doc """
`Function!/n` is similar to `Function/n` but raises error if an error occurs during the request
"""
def list(client, %{calendar_id: calendar_id} = _event, opts \\ [], headers \\ []) do
path = "#{@base_url}/#{calendar_id}/events"
client
|> OAuth2.Client.get(path, headers, opts)
|> show_resp("Get event list")
end
def list!(client, event, opts \\ [], headers \\ []) do
case list(client, event, opts, headers) do
{:ok, action, _resp} -> action
{:error, code, message} -> raise "#{code} - #{message}"
end
end
def get(client, %{calendar_id: calendar_id, id: id} = _event, opts \\ [], headers \\ []) do
path = "#{@base_url}/#{calendar_id}/events/#{id}"
client
|> OAuth2.Client.get(path, headers, opts)
|> show_resp("Get event information")
end
def get!(client, event, opts \\ [], headers \\ []) do
case get(client, event, opts, headers) do
{:ok, action, _resp} -> action
{:error, code, message} -> raise "#{code} - #{message}"
end
end
def insert(client, %{calendar_id: calendar_id} = event, opts \\ [], headers \\ []) do
path = "#{@base_url}/#{calendar_id}/events"
headers = headers ++ @content_type
client
|> OAuth2.Client.post(path, event, headers, opts)
|> show_resp("Insert event")
end
def insert!(client, event, opts \\ [], headers \\ []) do
case insert(client, event, opts, headers) do
{:ok, action, _resp} -> action
{:error, code, message} -> raise "#{code} - #{message}"
end
end
def update(client, %{calendar_id: calendar_id, id: id} = event, opts \\ [], headers \\ []) do
path = "#{@base_url}/#{calendar_id}/events/#{id}"
headers = headers ++ @content_type
client
|> OAuth2.Client.put(path, event, headers, opts)
|> show_resp("Update event")
end
def update!(client, event, opts \\ [], headers \\ []) do
case update(client, event, opts, headers) do
{:ok, action, _resp} -> action
{:error, code, message} -> raise "#{code} - #{message}"
end
end
def patch(client, %{calendar_id: calendar_id, id: id} = event, opts \\ [], headers \\ []) do
path = "#{@base_url}/#{calendar_id}/events/#{id}"
headers = headers ++ @content_type
client
|> OAuth2.Client.patch(path, event, headers, opts)
|> show_resp("Update event")
end
def patch!(client, event, opts \\ [], headers \\ []) do
case patch(client, event, opts, headers) do
{:ok, action, _resp} -> action
{:error, code, message} -> raise "#{code} - #{message}"
end
end
def delete(client, %{calendar_id: calendar_id, id: id} = _event, opts \\ [], headers \\ []) do
path = "#{@base_url}/#{calendar_id}/events/#{id}"
client
|> OAuth2.Client.delete(path, "", headers, opts)
|> show_resp("Delete event")
end
def delete!(client, event, opts \\ [], headers \\ []) do
case delete(client, event, opts, headers) do
{:ok, action, _resp} -> action
{:error, code, message} -> raise "#{code} - #{message}"
end
end
end