Allow users to add a github username via the UI.
This commit is contained in:
parent
4a3670f676
commit
9075cfedf5
8 changed files with 76 additions and 41 deletions
|
@ -15,7 +15,7 @@ defmodule Faces.Gallery.GithubUserData do
|
|||
}}
|
||||
|
||||
iex> GitHubUserData.get("thisUserReallyDoesntExist")
|
||||
{:error, "404 while retrieving thisUserReallyDoesntExist from Github: Not Found"}
|
||||
{:error, "404 while retrieving \"thisUserReallyDoesntExist\" from Github: Not Found"}
|
||||
"""
|
||||
def get(username) do
|
||||
with {200, user_data, _} <- get_user_from_github(username),
|
||||
|
@ -27,10 +27,10 @@ defmodule Faces.Gallery.GithubUserData do
|
|||
{:error, reason}
|
||||
|
||||
{i, %{"message" => message}, _} when is_integer(i) ->
|
||||
{:error, "#{i} while retrieving #{username} from Github: #{message}"}
|
||||
{:error, "#{i} while retrieving #{inspect(username)} from Github: #{message}"}
|
||||
|
||||
{i, _, _} when is_integer(i) ->
|
||||
{:error, "#{i} while retrieving #{username} from Github"}
|
||||
{:error, "#{i} while retrieving #{inspect(username)} from Github"}
|
||||
end
|
||||
end
|
||||
|
||||
|
|
20
lib/faces_web/controllers/face_controller.ex
Normal file
20
lib/faces_web/controllers/face_controller.ex
Normal file
|
@ -0,0 +1,20 @@
|
|||
defmodule FacesWeb.FaceController do
|
||||
use FacesWeb, :controller
|
||||
alias Faces.Gallery
|
||||
|
||||
def index(conn, _params) do
|
||||
render(conn, "index.html", people: Gallery.list_people())
|
||||
end
|
||||
|
||||
def create(conn, %{"username" => username}) do
|
||||
case Gallery.import_user(username) do
|
||||
{:ok, _user} ->
|
||||
render(conn, "index.html", people: Gallery.list_people())
|
||||
|
||||
{:error, reason} ->
|
||||
conn
|
||||
|> put_flash(:error, reason)
|
||||
|> render("index.html", people: Gallery.list_people())
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,8 +0,0 @@
|
|||
defmodule FacesWeb.PageController do
|
||||
use FacesWeb, :controller
|
||||
alias Faces.Gallery
|
||||
|
||||
def index(conn, _params) do
|
||||
render(conn, "index.html", people: Gallery.list_people())
|
||||
end
|
||||
end
|
|
@ -2,21 +2,22 @@ defmodule FacesWeb.Router do
|
|||
use FacesWeb, :router
|
||||
|
||||
pipeline :browser do
|
||||
plug :accepts, ["html"]
|
||||
plug :fetch_session
|
||||
plug :fetch_flash
|
||||
plug :protect_from_forgery
|
||||
plug :put_secure_browser_headers
|
||||
plug(:accepts, ["html"])
|
||||
plug(:fetch_session)
|
||||
plug(:fetch_flash)
|
||||
plug(:protect_from_forgery)
|
||||
plug(:put_secure_browser_headers)
|
||||
end
|
||||
|
||||
pipeline :api do
|
||||
plug :accepts, ["json"]
|
||||
plug(:accepts, ["json"])
|
||||
end
|
||||
|
||||
scope "/", FacesWeb do
|
||||
pipe_through :browser # Use the default browser stack
|
||||
# Use the default browser stack
|
||||
pipe_through(:browser)
|
||||
|
||||
get "/", PageController, :index
|
||||
resources("/", FaceController)
|
||||
end
|
||||
|
||||
# Other scopes may use custom stacks.
|
||||
|
|
41
lib/faces_web/templates/face/index.html.eex
Normal file
41
lib/faces_web/templates/face/index.html.eex
Normal file
|
@ -0,0 +1,41 @@
|
|||
<div class="row">
|
||||
<div class="col-sm">
|
||||
<h1>Face Gallery</h1>
|
||||
|
||||
<%= if get_flash(@conn, :error) do %>
|
||||
<p class="alert alert-danger" role="alert"><%= get_flash(@conn, :error) %></p>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" id="face-gallery">
|
||||
<%= for person <- @people do %>
|
||||
<div class="col-sm-3 mb-3">
|
||||
<div class="card">
|
||||
<img class="card-img-top" src="<%= person.avatar_url %>" alt="<%= person.name %>">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><%= person.name %></h5>
|
||||
<p class="card-text"><%= person.location %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<div class="col-sm-3 mb-3">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title">Add Face</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<%= form_for @conn, face_path(@conn, :create), fn f -> %>
|
||||
<div class="form-group">
|
||||
<label for="username">Github Username</label>
|
||||
<%= text_input f, :username, class: "form-control" %>
|
||||
</div>
|
||||
|
||||
<%= submit "Add", class: "btn btn-primary" %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,19 +0,0 @@
|
|||
<div class="row">
|
||||
<div class="col-sm">
|
||||
<h1>Face Gallery</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" id="face-gallery">
|
||||
<%= for person <- @people do %>
|
||||
<div class="col-sm-3 m-3">
|
||||
<div class="card">
|
||||
<img class="card-img-top" src="<%= person.avatar_url %>" alt="<%= person.name %>">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><%= person.name %></h5>
|
||||
<p class="card-text"><%= person.location %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
3
lib/faces_web/views/face_view.ex
Normal file
3
lib/faces_web/views/face_view.ex
Normal file
|
@ -0,0 +1,3 @@
|
|||
defmodule FacesWeb.FaceView do
|
||||
use FacesWeb, :view
|
||||
end
|
|
@ -1,3 +0,0 @@
|
|||
defmodule FacesWeb.PageView do
|
||||
use FacesWeb, :view
|
||||
end
|
Reference in a new issue