Current section

Files

Jump to
cf_sync lib cf_sync sync_payload.ex
Raw

lib/cf_sync/sync_payload.ex

defmodule CFSync.SyncPayload do
@moduledoc false
@type delta() :: {:upsert, map() | map()} | {:delete_asset | :delete_entry, binary()}
defstruct next_url: "",
next_url_type: :next_page,
deltas: []
@type t() :: %__MODULE__{
next_url: binary(),
next_url_type: :next_page | :next_sync,
deltas: list(delta())
}
@spec new(%{:items => [], optional(any) => any}) :: CFSync.SyncPayload.t()
def new(%{"nextPageUrl" => url, "items" => items}) do
%__MODULE__{
next_url: url,
next_url_type: :next_page,
deltas: deltas(items)
}
end
def new(%{"nextSyncUrl" => url, "items" => items}) do
%__MODULE__{
next_url: url,
next_url_type: :next_sync,
deltas: deltas(items)
}
end
defp deltas(items) do
for %{"sys" => %{"id" => id, "type" => type}} = item <- items do
case type do
"Asset" ->
{:upsert_asset, item}
"Entry" ->
{:upsert_entry, item}
"DeletedAsset" ->
{:delete_asset, id}
"DeletedEntry" ->
{:delete_entry, id}
end
end
end
end