Pow v1.0.20 Pow.Store.Backend.Base behaviour View Source

Used to set up API for key-value cache store.

Usage

This is an example using Cachex:

defmodule MyApp.CachexCache do
  @behaviour Pow.Store.Backend.Base

  alias Pow.Config

  @cachex_tab __MODULE__

  @impl true
  def put(config, record_or_records) do
    records =
      record_or_records
      |> List.wrap()
      |> Enum.map(fn {key, value} ->
        {wrap_namespace(config, key), value}
      end)

    Cachex.put_many(@cachex_tab, records, ttl: Config.get(config, :ttl))
  end

  @impl true
  def delete(config, key) do
    key = wrap_namespace(config, key)

    Cachex.del(@cachex_tab, key)
  end

  @impl true
  def get(config, key) do
    key = wrap_namespace(config, key)

    case Cachex.get(@cachex_tab, key) do
      {:ok, nil}   -> :not_found
      {:ok, value} -> value
    end
  end

  @impl true
  def all(config, match_spec) do
    query = Cachex.Query.create(match_spec, :key)

    @cachex_tab
    |> Cachex.stream!(query)
    |> Enum.map(fn {key, value} -> {unwrap_namespace(key), value} end)
  end

  defp wrap_namespace(config, key) do
    namespace = Config.get(config, :namespace, "cache")

    [namespace | List.wrap(key)]
  end

  defp unwrap_namespace([_namespace, key]), do: key
  defp unwrap_namespace([_namespace | key]), do: key
end

Link to this section Summary

Link to this section Types

Link to this section Callbacks

Link to this callback

all(config, key_match)

View Source
all(config(), key_match()) :: [record()]
Link to this callback

delete(config, key)

View Source
delete(config(), key()) :: :ok
Link to this callback

get(config, key)

View Source
get(config(), key()) :: any() | :not_found
Link to this callback

put(config, arg2)

View Source
put(config(), record() | [record()]) :: :ok