diff --git a/apps/bwc_web/lib/bwc_web/controllers/session_controller.ex b/apps/bwc_web/lib/bwc_web/controllers/session_controller.ex index a08b828..b08a2b9 100644 --- a/apps/bwc_web/lib/bwc_web/controllers/session_controller.ex +++ b/apps/bwc_web/lib/bwc_web/controllers/session_controller.ex @@ -1,9 +1,31 @@ defmodule BwcWeb.SessionController do use BwcWeb, :controller + def update(conn, params) do + cards = Bwc.list_cards() + player = Map.get(params, "player") + new_username = Map.get(player, "username") + old_username = Map.get(player, "old_username") + case {old_username, new_username} |> Bwc.change_name() do + {:ok, player} -> + conn + |> put_session(:username, player.username) + |> put_flash(:info, "You are now known as '#{player.username}'.") + |> redirect(to: Routes.card_path(conn, :index, cards)) + {:error, player} -> + conn |> render("new.html", player: player, method: :update) + end + end + def new(conn, _params) do player = Bwc.new_player() - render(conn, "new.html", player: player) + method = cond do + conn |> get_session(:username) == "Nobody" -> + :create + true -> + :update + end + render(conn, "new.html", player: player, method: method) end def set_name(conn, params) do diff --git a/apps/bwc_web/lib/bwc_web/roster.ex b/apps/bwc_web/lib/bwc_web/roster.ex index 7971406..6dec94e 100644 --- a/apps/bwc_web/lib/bwc_web/roster.ex +++ b/apps/bwc_web/lib/bwc_web/roster.ex @@ -6,12 +6,12 @@ defmodule BwcWeb.Roster do def call(conn, _opts) do import Logger - player = + {:ok, player} = conn |> get_session(:username) |> case do - nil -> "Nobody" - username -> Bwc.get_player_by(%{username: username}) + nil -> {:ok, "Nobody"} + username -> Bwc.get_or_create_player(username) end Logger.debug(player) assign(conn, :current_player, player) diff --git a/apps/bwc_web/lib/bwc_web/router.ex b/apps/bwc_web/lib/bwc_web/router.ex index 5a96571..8301485 100644 --- a/apps/bwc_web/lib/bwc_web/router.ex +++ b/apps/bwc_web/lib/bwc_web/router.ex @@ -22,6 +22,8 @@ defmodule BwcWeb.Router do get "/join", SessionController, :new post "/join", SessionController, :create + post "/rename", SessionController, :update + put "/rename", SessionController, :update get "/leave", SessionController, :delete get "/create", CardController, :new diff --git a/apps/bwc_web/lib/bwc_web/templates/session/new.html.eex b/apps/bwc_web/lib/bwc_web/templates/session/new.html.eex index 9db8e0f..902848d 100644 --- a/apps/bwc_web/lib/bwc_web/templates/session/new.html.eex +++ b/apps/bwc_web/lib/bwc_web/templates/session/new.html.eex @@ -1,8 +1,13 @@ -<%= form_for @player, Routes.session_path(@conn, :create), fn(f) -> %> +<%= form_for @player, Routes.session_path(@conn, @method), fn(f) -> %>