Got usernames working, for now, I think.

This commit is contained in:
Ryan Pandya 2020-12-29 13:28:46 -08:00
parent 2a288e2507
commit ffa6d3bc55
7 changed files with 56 additions and 12 deletions

View File

@ -11,12 +11,23 @@ defmodule Bwc do
def create_player(attrs), do: Player.changeset(%Player{}, attrs) |> @repo.insert()
def delete_player(id), do: get_player(id) |> @repo.delete
def delete_player(nil), do: {:error, "Player does not exist"}
def delete_player(%Player{} = player), do: player |> @repo.delete
def list_players, do: @repo.all(Player)
def reset, do: Bwc.list_players |> Enum.each(fn(p) -> Bwc.delete_player(p) end)
def change_name({old_username, new_username}) do
{:ok, old_player} = old_username |> Bwc.get_or_create_player
old_player |> Player.changeset(%{username: new_username}) |> @repo.update()
end
def list_players, do: @repo.all(Player) |> Enum.filter(fn(p) -> p.username != "Nobody" end)
def get_player(id), do: @repo.get!(Player, id)
def get_player_by_username(username), do: get_player_by(%{username: username})
def get_player_by(params), do: @repo.get_by(Player, params)
def get_or_create_player(username) do

View File

@ -7,7 +7,7 @@ window.UIkit = UIkit;
window.show_login_box = () => {
$("#top-bar-username a").hide();
$("#top-bar-login-box").show().focus();
$("#top-bar-login-box").val($("#top-bar-username a").text().trim()).show().focus();
}
@ -37,7 +37,7 @@ $("#top-bar-login-box").keyup(function(e) {
window.login = () => {
var CSRF_TOKEN = $("input[name=_csrf_token]").val();
var username = $("#top-bar-login-box").val();
var username = $("#top-bar-login-box").val().trim();
$.ajax({
url: "/api/join",
method: 'POST',
@ -45,13 +45,14 @@ window.login = () => {
xhr.setRequestHeader("X-CSRF-Token", CSRF_TOKEN);
},
data: {
username: username
username: username,
old_username: $("#top-bar-username a").text().trim()
}
}).done(function(response) {
console.log(response);
UIkit.notification(response['data']);
hide_login_box();
$("#top-bar-username a").text(response['username']);
$("#top-bar-username a").text(response['username']);
});
}

View File

@ -8,8 +8,9 @@ defmodule BwcWeb.SessionController do
def set_name(conn, params) do
import Logger
case Map.get(params, "username") |> Bwc.get_or_create_player() do
new_username = Map.get(params, "username")
old_username = Map.get(params, "old_username")
case {old_username, new_username} |> Bwc.change_name() do
{:ok, player} ->
conn |> put_session(:username, player.username) |> render("set_name.json", username: player.username)

View File

@ -4,14 +4,16 @@ defmodule BwcWeb.Roster do
def init(opts), do: opts
def call(conn, _opts) do
import Logger
player =
conn
|> get_session(:username)
|> case do
nil -> Bwc.new_player()
nil -> "Nobody"
username -> Bwc.get_player_by(%{username: username})
end
assign(conn, :player, player)
Logger.debug(player)
assign(conn, :current_player, player)
end
end

View File

@ -25,7 +25,11 @@
<div id="top-bar-username" class='uk-flex uk-flex-row uk-flex-center uk-margin-small-top'>
<b>You are:&nbsp;</b>
<a style='width:100px;' href="javascript:show_login_box()">
<%= @player.username %>
<%= if @current_player do %>
<%=show_username(@current_player)%>
<% else %>
Nobody
<% end %>
</a>
<input id="top-bar-login-box"/>
</div>

View File

@ -5,6 +5,9 @@
<%= text_input f, :username, "placeholder": "Join the game as..." %>
<%= error_tag f, :username %>
</div>
<div>
<%= text_input f, :picture, class: "uk-hidden" %>
</div>
<div class="controls uk-margin-top">
<div class="uk-flex uk-flex-center">
<ul class="uk-subnav uk-subnav-pill" style="margin-bottom:0px;">

View File

@ -1,3 +1,25 @@
defmodule BwcWeb.LayoutView do
use BwcWeb, :view
def show_username(%Ecto.Changeset{} = player) do
cond do
player.valid? ->
player.username
true ->
Nobody
end
end
def show_username(%Bwc.Player{} = player) do
player.username
end
def show_username("Nobody" = player) do
"Nobody"
end
def show_username(nil = player) do
"Nobody"
end
end