57 lines
1.6 KiB
Elixir
57 lines
1.6 KiB
Elixir
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
|