Current section

Files

Jump to
kandis lib visitor_session visitor_session.ex
Raw

lib/visitor_session/visitor_session.ex

defmodule Kandis.VisitorSession do
require Ecto.Query
@repo Application.get_env(:kandis, :repo)
alias Kandis.VisitorSessionStore
@moduledoc false
alias Kandis.VisitorSessionGenServer
# public API:
defdelegate get_data(sid), to: VisitorSessionGenServer
defdelegate set_data(sid, data), to: VisitorSessionGenServer
defdelegate set_value(sid, key, value), to: VisitorSessionGenServer
defdelegate get_value(sid, key, default \\ nil), to: VisitorSessionGenServer
def merge_into(sid, key, values) when is_map(values) do
merged =
get_value(sid, key, %{})
|> Map.merge(values)
set_value(sid, key, merged)
merged
end
def clean_and_archive(sid, empty_data_record, archive_sid)
when is_map(empty_data_record) and is_binary(archive_sid) do
data = get_data(sid)
archive_data = data
new_data = data |> Map.merge(empty_data_record)
VisitorSessionGenServer.save_data_to_db(archive_sid, archive_data)
set_data(sid, new_data)
end
def get_latest_sids(n \\ 10) when is_integer(n) do
VisitorSessionStore
|> Ecto.Query.select([r], {r.inserted_at, r.sid})
|> Ecto.Query.order_by(desc: :inserted_at)
|> Ecto.Query.limit(^n)
|> @repo.all()
end
end