defmodule PinchflatWeb.Api.V1.ApiSettingController do @moduledoc """ JSON API controller for Settings. """ use PinchflatWeb, :controller alias Pinchflat.Settings def show(conn, _params) do setting = Settings.record() safe_data = setting_to_map(setting) json(conn, %{data: safe_data}) end def update(conn, %{"setting" => params}) do setting = Settings.record() case Settings.update_setting(setting, params) do {:ok, setting} -> safe_data = setting_to_map(setting) json(conn, %{data: safe_data}) {:error, %Ecto.Changeset{} = changeset} -> conn |> put_status(:unprocessable_entity) |> json(%{errors: format_changeset_errors(changeset)}) end end def app_info(conn, _params) do info = %{ version: Application.spec(:pinchflat, :vsn) |> to_string(), environment: Application.get_env(:pinchflat, :env), yt_dlp_version: Settings.get!(:yt_dlp_version), apprise_version: Settings.get!(:apprise_version), onboarding: Settings.get!(:onboarding) } json(conn, %{data: info}) end defp setting_to_map(setting) do setting |> Map.from_struct() |> Map.drop([:route_token, :__meta__, :__struct__]) end defp format_changeset_errors(changeset) do Ecto.Changeset.traverse_errors(changeset, fn {msg, opts} -> Enum.reduce(opts, msg, fn {key, value}, acc -> String.replace(acc, "%{#{key}}", to_string(value)) end) end) end end