Current section
Files
Jump to
Current section
Files
lib/timeularex.ex
defmodule Timeularex do
@moduledoc """
API wrapper for the Timeular public API
http://developers.timeular.com/public-api/
"""
use Application
alias Timeularex.Client
alias Timeularex.Resources
def start(_type, _args) do
children = [
Timeularex.Client
]
opts = [strategy: :one_for_one, name: Timeularex.Supervisor]
Supervisor.start_link(children, opts)
end
def init(_) do
IO.puts("test")
end
# Timeular API
def integrations do
"/integrations"
|> Client.request(:get)
end
def activities do
"/activities"
|> Client.request(:get)
end
def create_activity(%Resources.Activity{} = activity) do
"/activities"
|> Client.request(:post, activity)
end
def update_activity(%Resources.Activity{} = activity) do
"/activities"
|> Client.request(:patch, activity)
end
def archive_activity(activity_id) do
"/activities/#{activity_id}"
|> Client.request(:delete)
end
def assign_side_activity(device_side, activity_id) do
"/activities/#{activity_id}/device-side/#{device_side}"
|> Client.request(:post)
end
def unassign_side_activity(device_side, activity_id) do
"/activities/#{activity_id}/device-side/#{device_side}"
|> Client.request(:delete)
end
def archived_activities do
"/archived_activities"
|> Client.request(:get)
end
def devices do
"/devices"
|> Client.request(:get)
end
def activate_device(device_serial) do
"/devices/#{device_serial}/active"
|> Client.request(:post)
end
def deactivate_device(device_serial) do
"/devices/#{device_serial}/active"
|> Client.request(:delete)
end
def update_device_name(device_serial, name) do
"/devices/#{device_serial}"
|> Client.request(:patch, %{name: name})
end
def remove_device(device_serial) do
"/devices/#{device_serial}"
|> Client.request(:delete)
end
def disable_device(device_serial) do
"/devices/#{device_serial}/disabled"
|> Client.request(:post)
end
def enable_device(device_serial) do
"/devices/#{device_serial}/disabled"
|> Client.request(:delete)
end
def tracking do
"/tracking"
|> Client.request(:get)
end
def start_tracking(activity_id) do
# YYYY-MM-DDTHH:mm:ss.SSS
current_datetime = DateTime.utc_now() |> timeular_datetime_format
"/tracking/#{activity_id}/start"
|> Client.request(:post, %{startedAt: current_datetime})
end
def edit_tracking_note(activity_id, %Resources.Note{} = note) do
"/tracking/#{activity_id}"
|> Client.request(:patch, note)
end
def stop_tracking(activity_id) do
current_datetime = DateTime.utc_now() |> timeular_datetime_format()
"/tracking/#{activity_id}/stop"
|> Client.request(:post, %{stoppedAt: current_datetime})
end
def time_entries(stopped_after, started_before) do
"/time-entries/#{stopped_after}/#{started_before}"
|> Client.request(:get)
end
def time_entry(entry_id) do
"/time-entries/#{entry_id}"
|> Client.request(:get)
end
def reports(start_timestamp, stop_timestamp) do
"/report/#{start_timestamp}/#{stop_timestamp}"
|> Client.request(:get)
end
def tags_and_mentions do
"/tags-and-mentions"
|> Client.request(:get)
end
# Helpers
defp timeular_datetime_format(datetime) do
datetime
|> DateTime.truncate(:millisecond)
|> DateTime.to_iso8601()
|> String.trim_trailing("Z")
end
end