more changes

This commit is contained in:
benbot 2023-10-25 04:48:36 -04:00
parent beaf92f7c4
commit a3a4af7965
18 changed files with 165 additions and 24 deletions

View file

@ -10,7 +10,7 @@ defmodule EzcontainerRailway.GraphqlClient do
case Req.Request.put_headers(Req.new(), [{"Authorization", "Bearer #{opts[:token]}"}]) |> Req.post(url: @graphql_url, json: body) do
{:ok, resp} -> resp
{:error, _} -> :error
{:error, e} -> raise(e)
end
end
end

View file

@ -0,0 +1,14 @@
defmodule EzcontainerRailway.Projects do
import Ecto.Query
alias EzcontainerRailway.Repo
alias EzcontainerRailway.Project
def get_project_by_user_id(user_id) do
Repo.one(
from p in Project,
where: p.user_id == ^user_id,
limit: 1
)
end
end

View file

@ -0,0 +1,18 @@
defmodule EzcontainerRailway.Project do
use Ecto.Schema
import Ecto.Changeset
schema "projects" do
field :user_id, :string
field :project_id, :string
timestamps(type: :utc_datetime)
end
@doc false
def changeset(projects, attrs) do
projects
|> cast(attrs, [:user_id, :project_id])
|> validate_required([:user_id, :project_id])
end
end

View file

@ -8,6 +8,7 @@ defmodule EzcontainerRailway.Railway do
edges {
node {
id
name
}
}
}
@ -16,4 +17,53 @@ defmodule EzcontainerRailway.Railway do
token: token
)
end
def create_service(container, token) when is_map(container) do
GraphqlClient.query(
"""
""",
variables: container
)
end
def create_project(name, token) do
GraphqlClient.query(
"""
mutation {
projectCreate(input: {name: $name}) {
id
name
}
}
""",
token: token,
variables: %{ "name" => name }
)
|> format_response
end
def is_token_valid?(token) do
resp = get_projects(token).body
if has_errors?(resp) do
false
else
true
end
end
def has_errors?(resp) when is_map(resp) do
has_errors_in_array?(resp["errors"])
end
defp format_response(resp) when is_map(resp) do
if has_errors?(resp) do
{:error, resp["error"]}
else
{:ok, resp["data"]}
end
end
defp has_errors_in_array?([_|_]), do: true
defp has_errors_in_array?(_), do: false
end

View file

@ -1,2 +1,3 @@
defmodule EzcontainerRailway.Repo do
use Ecto.Repo, otp_app: :ezcontainer_railway, adapter: Ecto.Adapters.SQLite3
end

View file

@ -1 +0,0 @@
benbot@darch.125027:1698169376

View file

@ -11,7 +11,7 @@ defmodule EzcontainerRailwayWeb.ContainerController do
end
def create(conn, params) do
conn
end
def show(conn, params) do

View file

@ -1,30 +1,29 @@
defmodule EzcontainerRailwayWeb.SessionController do
alias EzcontainerRailway.Railway
use EzcontainerRailwayWeb, :controller
def token(conn, %{"railway_token" => token}) do
case token_valid?(token) do
true ->
case get_projects(token) do
resp when is_map(resp) ->
IO.inspect(resp)
conn
|> put_session(:railway_token, token)
|> assign(:railway_token, token)
|> redirect(to: "/containers")
false ->
nil ->
conn
|> put_flash(:error, "Invalid Token")
|> redirect(to: "/")
end
end
defp token_valid?(token) do
defp get_projects(token) do
resp = EzcontainerRailway.Railway.get_projects(token).body
if has_errors?(resp["errors"]) do
false
if Railway.has_errors?(resp) do
nil
else
true
resp["data"]
end
end
defp has_errors?([_|_]), do: true
defp has_errors?(_), do: false
end

View file

@ -0,0 +1,39 @@
defmodule EzcontainerRailwayWeb.ContainerCreateLive do
alias Phoenix.Component
use Phoenix.LiveView
def render(assigns) do
~H"""
<%= live_flash(@flash, :error) %>
<%= live_flash(@flash, :info) %>
<dialog open class="modal">
<article class="modal-box">
<.form
for={@form}
method="post"
action="/container"
>
<label class="label">
<span class="label-text">Container Name</span>
<span class="label-text-alt mr-20">Tag</span>
</label>
<div class="grid grid-rows-1 grid-cols-4 gap-4">
<input class="input input-bordered inline col-span-3" name="container_name" />
<input class="input input-bordered inline" name="container_tag" />
</div>
<div class="text-center mt-6">
<button class="btn">Test</button>
</div>
</.form>
</article>
</dialog>
"""
end
def mount(_params, _session, socket) do
form = Component.to_form(%{"container_name" => "", "contianer_tag" => ""})
{:ok, socket |> assign(:form, form)}
end
end

View file

@ -21,7 +21,8 @@ defmodule EzcontainerRailwayWeb.Router do
get "/", PageController, :home
post "/token", SessionController, :token
resources("/containers", ContainerController, only: [:index, :create, :show])
live "/containers", ContainerCreateLive
resources("/containers", ContainerController, only: [:create, :show])
end
# Other scopes may use custom stacks.