From 794a2c1bf3552f0a260dfdf0580180eac6b9f77b Mon Sep 17 00:00:00 2001 From: benbot Date: Fri, 27 Oct 2023 01:48:53 -0400 Subject: [PATCH] alright, that's it --- assets/tailwind.config.js | 2 +- config/prod.exs | 4 ++ .../components/layouts/app.html.heex | 4 +- .../controllers/page_html/home.html.heex | 2 +- .../controllers/session_controller.ex | 6 +++ .../live/container_create_live.ex | 50 +++++++++++++------ .../live/containers_live.ex | 42 ++++++++++------ lib/ezcontainer_railway_web/router.ex | 1 + 8 files changed, 76 insertions(+), 35 deletions(-) diff --git a/assets/tailwind.config.js b/assets/tailwind.config.js index a4d122b..702913a 100644 --- a/assets/tailwind.config.js +++ b/assets/tailwind.config.js @@ -13,7 +13,7 @@ module.exports = { ], theme: {}, daisyui: { - themes: ["cupcake"] + themes: ["dracula"] }, plugins: [ require("daisyui"), diff --git a/config/prod.exs b/config/prod.exs index 5a2cfc8..637971d 100644 --- a/config/prod.exs +++ b/config/prod.exs @@ -8,6 +8,10 @@ import Config config :ezcontainer_railway, EzcontainerRailwayWeb.Endpoint, cache_static_manifest: "priv/static/cache_manifest.json" +# Configure your database +config :ezcontainer_railway, EzcontainerRailway.Repo, + database: "./db/db_prod.sqlite3" + # Configures Swoosh API Client config :swoosh, api_client: Swoosh.ApiClient.Finch, finch_name: EzcontainerRailway.Finch diff --git a/lib/ezcontainer_railway_web/components/layouts/app.html.heex b/lib/ezcontainer_railway_web/components/layouts/app.html.heex index 7e39456..596d24b 100644 --- a/lib/ezcontainer_railway_web/components/layouts/app.html.heex +++ b/lib/ezcontainer_railway_web/components/layouts/app.html.heex @@ -7,7 +7,7 @@
- Your App Name + EzContainer
@@ -15,7 +15,7 @@
Create Containers Show Containers - Logout + Logout
diff --git a/lib/ezcontainer_railway_web/controllers/page_html/home.html.heex b/lib/ezcontainer_railway_web/controllers/page_html/home.html.heex index fcb1768..91941b7 100644 --- a/lib/ezcontainer_railway_web/controllers/page_html/home.html.heex +++ b/lib/ezcontainer_railway_web/controllers/page_html/home.html.heex @@ -9,7 +9,7 @@ > diff --git a/lib/ezcontainer_railway_web/controllers/session_controller.ex b/lib/ezcontainer_railway_web/controllers/session_controller.ex index dc704e2..31087b5 100644 --- a/lib/ezcontainer_railway_web/controllers/session_controller.ex +++ b/lib/ezcontainer_railway_web/controllers/session_controller.ex @@ -2,6 +2,12 @@ defmodule EzcontainerRailwayWeb.SessionController do alias EzcontainerRailway.Railway use EzcontainerRailwayWeb, :controller + def logout(conn, _) do + conn + |> clear_session() + |> redirect(to: "/") + end + def token(conn, %{"railway_token" => token}) do case get_projects(token) do resp when is_list(resp) -> diff --git a/lib/ezcontainer_railway_web/live/container_create_live.ex b/lib/ezcontainer_railway_web/live/container_create_live.ex index e1a22fc..e084ff6 100644 --- a/lib/ezcontainer_railway_web/live/container_create_live.ex +++ b/lib/ezcontainer_railway_web/live/container_create_live.ex @@ -7,41 +7,46 @@ defmodule EzcontainerRailwayWeb.ContainerCreateLive do def render(assigns) do ~H"""
-
- <%= if @target == "container" do %> +
+ <%= if @target == "image" do %> <.form for={@form} phx-submit="create_container"> - -
+ +
- +
<% end %> <%= if @target == "repo" do %> <.form for={@form} phx-submit="create_container"> - -
+ +
- +
<% end %> +
+ +
""" @@ -50,10 +55,10 @@ defmodule EzcontainerRailwayWeb.ContainerCreateLive do def mount(_params, session, socket) do form = Component.to_form(%{"name" => "", "tag" => ""}) - {:ok, socket |> assign(form: form, target: "container", session: session)} + {:ok, socket |> assign(form: form, target: "image", session: session, loading: false)} end - def handle_event("create_container", data, socket) do + def handle_info({:create, data}, socket) do {:ok, resp} = Railway.create_service( data["name"], "image", @@ -62,4 +67,17 @@ defmodule EzcontainerRailwayWeb.ContainerCreateLive do {:noreply, socket |> put_flash(:info, "container deplying") |> push_redirect(to: "/containers")} end + + def handle_event("create_container", data, socket) do + send(self(), {:create, data}) + {:noreply, socket |> assign(loading: true)} + end + + def handle_event("switch_target", _, socket) do + IO.inspect socket.assigns + case socket.assigns.target do + "repo" -> {:noreply, socket |> assign(target: "image")} + "image" -> {:noreply, socket |> assign(target: "repo")} + end + end end diff --git a/lib/ezcontainer_railway_web/live/containers_live.ex b/lib/ezcontainer_railway_web/live/containers_live.ex index 33be262..85f798b 100644 --- a/lib/ezcontainer_railway_web/live/containers_live.ex +++ b/lib/ezcontainer_railway_web/live/containers_live.ex @@ -6,38 +6,50 @@ defmodule EzcontainerRailwayWeb.ContainersLive do def render(assigns) do ~H"""
- <%= for service <- @services do %> -
-
-

<%= service["name"] %>

-
- -
+ <%= for service <- @services do %> +
+
+

<%= service["name"] %>

+
+
-
- <% end %> +
+
+ <% end %>
""" end def mount(_params, session, socket) do {:ok, services} = Railway.get_services(session["railway_token"]) - IO.inspect services - {:ok, socket |> assign(session: session, services: services)} + socket = socket |> assign(session: session, services: services, loading: false) + + case length(services) do + 0 -> {:ok, socket |> put_flash(:error, "No running containers") |> push_navigate(to: "/containers/create")} + _ -> {:ok, socket |> assign(session: session, services: services, loading: false)} + end end def handle_info(:refresh, socket) do {:ok, services} = Railway.get_services(socket.assigns.session["railway_token"]) - {:noreply, socket |> assign(services: services)} + case length(services) do + 0 -> {:noreply, socket |> put_flash(:error, "No running containers") |> push_navigate(to: "/containers/create")} + _ -> {:noreply, socket |> assign(services: services, loading: false)} + end end - def handle_event("delete", data, socket) do - {:ok, services} = Railway.delete_container(data["project_id"], socket.assigns.session["railway_token"]) - + def handle_info({:delete, project_id}, socket) do + {:ok, _} = Railway.delete_container(project_id, socket.assigns.session["railway_token"]) send(self(), :refresh) {:noreply, socket} end + + def handle_event("delete", data, socket) do + send(self(), {:delete, data["project_id"]}) + + {:noreply, socket |> assign(loading: true)} + end end diff --git a/lib/ezcontainer_railway_web/router.ex b/lib/ezcontainer_railway_web/router.ex index 355d060..14778b4 100644 --- a/lib/ezcontainer_railway_web/router.ex +++ b/lib/ezcontainer_railway_web/router.ex @@ -37,6 +37,7 @@ defmodule EzcontainerRailwayWeb.Router do live "/containers/create", ContainerCreateLive live "/containers", ContainersLive + get "/logout", SessionController, :logout resources("/containers", ContainerController, only: [:create, :show]) end