After "mix phx.gen.auth Admins Admin admins" with added working register and login path.
This commit is contained in:
56
lib/beet_round_server_web/controllers/admin_controller.ex
Normal file
56
lib/beet_round_server_web/controllers/admin_controller.ex
Normal file
@ -0,0 +1,56 @@
|
||||
defmodule BeetRoundServerWeb.AdminController do
|
||||
use BeetRoundServerWeb, :controller
|
||||
|
||||
alias BeetRoundServer.Admins
|
||||
alias BeetRoundServer.Admins.Admin
|
||||
|
||||
action_fallback BeetRoundServerWeb.FallbackController
|
||||
|
||||
def create(conn, %{"admin" => admin_params}) do
|
||||
with {:ok, %Admin{} = admin} <- Admins.register_admin(admin_params) do
|
||||
conn
|
||||
|> put_status(:created)
|
||||
|> render(:show, admin: admin)
|
||||
else
|
||||
{:error, _changeset} ->
|
||||
existingAdmin = Admins.get_admin_by_email(admin_params["email"])
|
||||
|
||||
if existingAdmin == nil do
|
||||
conn
|
||||
|> put_status(:bad_request)
|
||||
|> render(:error, %{error: "Admin could not be created!", admin: admin_params})
|
||||
else
|
||||
admin = %{
|
||||
mail: existingAdmin.email,
|
||||
id: existingAdmin.id
|
||||
}
|
||||
|
||||
conn
|
||||
|> put_status(:conflict)
|
||||
|> render(:error, %{error: "Admin already exists!", admin: admin})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def show(conn, %{"id" => id}) do
|
||||
admin = Admins.get_admin!(id)
|
||||
render(conn, :show, admin: admin)
|
||||
end
|
||||
|
||||
def log_in(conn, %{"admin" => admin_params}) do
|
||||
case Admins.get_admin_by_email_and_password(admin_params["email"], admin_params["password"]) do
|
||||
nil ->
|
||||
IO.puts("Admin couldn't be found!")
|
||||
|
||||
conn
|
||||
|> put_status(:forbidden)
|
||||
|> render(:error, %{error: "Invalid email or password!", admin: admin_params})
|
||||
|
||||
admin ->
|
||||
encoded_token = Admins.create_admin_api_token(admin)
|
||||
updated_admin = Map.put(admin, :token, encoded_token)
|
||||
|
||||
render(conn, :token, admin: updated_admin)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user