Current section

Files

Jump to
plato lib plato_web controllers schema_controller.ex
Raw

lib/plato_web/controllers/schema_controller.ex

defmodule PlatoWeb.SchemaController do
use Phoenix.Controller, formats: [:html]
import Ecto.Query
def index(conn, _params) do
schemas = repo(conn).all(Plato.Schema)
render(conn, :index, schemas: schemas, base_path: base_path(conn))
end
def create(conn, %{"schema" => schema_params}) do
case Plato.Schema.create(schema_params, repo(conn)) do
{:ok, schema} ->
conn
|> put_flash(:info, "Schema '#{schema.name}' created successfully!")
|> redirect(to: base_path(conn))
{:error, _changeset} ->
conn
|> put_flash(:error, "Failed to create schema")
|> redirect(to: base_path(conn))
end
end
def show(conn, %{"id" => id}) do
case repo(conn).get(Plato.Schema, id) do
nil ->
conn
|> put_flash(:error, "Schema not found")
|> redirect(to: base_path(conn))
schema ->
fields_query = from(f in Plato.Field, order_by: [asc: f.position])
schema = repo(conn).preload(schema, [fields: {fields_query, :referenced_schema}])
all_schemas = repo(conn).all(Plato.Schema)
render(conn, :show, schema: schema, all_schemas: all_schemas, base_path: base_path(conn))
end
end
# Private helper to get repo from conn assigns
defp repo(conn) do
otp_app = conn.assigns[:plato_otp_app] || :plato
otp_app
|> Application.get_env(:plato, [])
|> Keyword.get(:repo, Plato.Repo)
end
# Private helper to get base path from conn assigns
defp base_path(conn) do
conn.assigns[:plato_base_path] || "/"
end
end