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