Current section

Files

Jump to
islands_vue_client lib islands_vue_client_web controllers session_controller.ex
Raw

lib/islands_vue_client_web/controllers/session_controller.ex

defmodule Islands.Vue.ClientWeb.SessionController do
use Islands.Vue.ClientWeb, :controller
alias Islands.Vue.Client.Player
alias Plug.Conn
@spec new(Conn.t(), map) :: Conn.t()
def new(conn, _params) do
render(conn, "new.html")
end
@spec create(Conn.t(), map) :: Conn.t()
def create(conn, %{"player" => %{"name" => name, "gender" => gender}}) do
player = Player.new(name, String.to_atom(gender))
conn
|> put_session(:player, player)
|> redirect_back_or_to_new_game
end
## Private functions
@spec redirect_back_or_to_new_game(Conn.t()) :: Conn.t()
defp redirect_back_or_to_new_game(conn) do
# The 'return_to' path retrieved by 'get_session' will be nil if going
# to '/sessions/new' directly instead of the usual '/' or '/games/new'.
path = get_session(conn, :return_to) || Routes.game_path(conn, :new)
conn
|> delete_session(:return_to)
|> redirect(to: path)
end
end