From 558852baaee60aef5d3d08326c2607c87d3fe1dc Mon Sep 17 00:00:00 2001 From: Matthew Philyaw Date: Tue, 16 Feb 2016 23:40:09 -0500 Subject: [PATCH] character controller roughed out. --- web/controllers/character_controller.ex | 60 +++++++++++++++++++++++++ web/router.ex | 5 +++ 2 files changed, 65 insertions(+) create mode 100644 web/controllers/character_controller.ex diff --git a/web/controllers/character_controller.ex b/web/controllers/character_controller.ex new file mode 100644 index 0000000..d1dac93 --- /dev/null +++ b/web/controllers/character_controller.ex @@ -0,0 +1,60 @@ +defmodule Yggdrasil.CharacterController do + use Yggdrasil.Web, :controller + + alias Yggdrasil.Character + + def index(conn, %{"filter" => %{"user_id" => user_id}}) do + # this should not happen, but could easily + # probably don't need to crash but rather return an error + ^user_id = conn.assigns.user + + chars = Repo.all from c in Character, + where: c.user_id == ^user_id, + select: c + + render conn, :show, data: chars + end + + def show(conn, %{"char_id" => char_id}) do + user_id = conn.assigns.user + + # returns nil if not found + # need to sort out what we want here. + char = Repo.one from c in Character, + where: c.id == ^char_id and c.user_id == ^user_id, + select: c + + render conn, :show, data: char + end + + def create(conn, %{"data" => %{"attributes" => attributes}}) do + char = Character.changeset(%Character{}, attributes) + + case Repo.insert(char) do + {:ok, new_char} -> + render conn, :show, data: new_char + {:error, err_changeset} -> + render conn, :errors, data: err_changeset + end + end + + def delete(conn, %{"char_id" => char_id}) do + user_id = conn.assigns.user + + # returns nil if not found + # need to sort out what we want here. + char = Repo.one from c in Character, + where: c.id == ^char_id and c.user_id == ^user_id, + select: c + + case Repo.delete(char)do + {:ok, _char} -> + # http://jsonapi.org/format/#crud-deleting + conn + |> put_status(204) + |> send_resp + {:error, err_changeset} -> + render conn, :errors, data: err_changeset + end + end +end diff --git a/web/router.ex b/web/router.ex index a9d1dcb..6165755 100644 --- a/web/router.ex +++ b/web/router.ex @@ -38,5 +38,10 @@ defmodule Yggdrasil.Router do pipe_through :guardian get "/games", GameController, :index + + get "/characters", CharacterController, :index + get "/characters/:char_id", CharacterController, :show + post "/characters", CharacterController, :create + delete "/characters/:char_id", CharacterController, :delete end end