30 lines
802 B
Elixir
30 lines
802 B
Elixir
defmodule Chesstrainer.Cache.Persist do
|
|
@moduledoc """
|
|
Persistance for cache. Backup and restore functions.
|
|
"""
|
|
|
|
@backup_path "priv/static/backups"
|
|
|
|
def backup(table) do
|
|
File.mkdir_p!(@backup_path)
|
|
filename = Path.join(@backup_path, "#{table}.det") |> String.to_charlist()
|
|
{:ok, dets_table} = :dets.open_file(filename, type: :set)
|
|
:ets.to_dets(table, dets_table)
|
|
:dets.sync(dets_table)
|
|
end
|
|
|
|
def restore(table) do
|
|
File.mkdir_p!(@backup_path)
|
|
filename = Path.join(@backup_path, "#{table}.det") |> String.to_charlist()
|
|
|
|
case :dets.open_file(table, file: filename, type: :set) do
|
|
{:ok, ^table} ->
|
|
:dets.foldl(fn entry, _ -> :ets.insert(table, entry) end, :ok, table)
|
|
:dets.close(table)
|
|
|
|
{:error, _} ->
|
|
:ok
|
|
end
|
|
end
|
|
end
|