postland/lib/postland_web/controllers/export_controller.ex

16 lines
560 B
Elixir

defmodule PostlandWeb.ExportController do
use PostlandWeb, :controller
def export(conn, _params) do
db_path = Postland.Repo.config() |> Keyword.get(:database)
dirname = Path.dirname(db_path)
filename = Path.basename(db_path)
files = [filename, "#{filename}-shm", "#{filename}-wal"] |> Enum.map(&String.to_charlist/1)
zip_path = Path.join([File.cwd!(), "priv", "tmp", "db-export.zip"])
:zip.create(String.to_charlist(zip_path), files, cwd: dirname)
send_download(conn, {:file, zip_path}, filename: "db-export.zip")
end
end