more changes
This commit is contained in:
parent
beaf92f7c4
commit
a3a4af7965
18 changed files with 165 additions and 24 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
[
|
[
|
||||||
import_deps: [:phoenix],
|
import_deps: [:ecto, :ecto_sql, :phoenix],
|
||||||
subdirectories: ["priv/*/migrations"],
|
subdirectories: ["priv/*/migrations"],
|
||||||
plugins: [Phoenix.LiveView.HTMLFormatter],
|
plugins: [Phoenix.LiveView.HTMLFormatter],
|
||||||
inputs: ["*.{heex,ex,exs}", "{config,lib,test}/**/*.{heex,ex,exs}", "priv/*/seeds.exs"]
|
inputs: ["*.{heex,ex,exs}", "{config,lib,test}/**/*.{heex,ex,exs}", "priv/*/seeds.exs"]
|
||||||
|
|
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -35,3 +35,4 @@ ezcontainer_railway-*.tar
|
||||||
npm-debug.log
|
npm-debug.log
|
||||||
/assets/node_modules/
|
/assets/node_modules/
|
||||||
|
|
||||||
|
db
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,10 @@ config :ezcontainer_railway,
|
||||||
ecto_repos: [EzcontainerRailway.Repo],
|
ecto_repos: [EzcontainerRailway.Repo],
|
||||||
generators: [timestamp_type: :utc_datetime]
|
generators: [timestamp_type: :utc_datetime]
|
||||||
|
|
||||||
|
# Configure your database
|
||||||
|
config :ezcontainer_railway, EzcontainerRailway.Repo,
|
||||||
|
database: "./db/db.sqlite3"
|
||||||
|
|
||||||
# Configures the endpoint
|
# Configures the endpoint
|
||||||
config :ezcontainer_railway, EzcontainerRailwayWeb.Endpoint,
|
config :ezcontainer_railway, EzcontainerRailwayWeb.Endpoint,
|
||||||
url: [host: "localhost"],
|
url: [host: "localhost"],
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,7 @@ import Config
|
||||||
|
|
||||||
# Configure your database
|
# Configure your database
|
||||||
config :ezcontainer_railway, EzcontainerRailway.Repo,
|
config :ezcontainer_railway, EzcontainerRailway.Repo,
|
||||||
username: "postgres",
|
database: "./db/db.sqlite3"
|
||||||
password: "postgres",
|
|
||||||
hostname: "localhost",
|
|
||||||
database: "ezcontainer_railway_dev",
|
|
||||||
stacktrace: true,
|
|
||||||
show_sensitive_data_on_connection_error: true,
|
|
||||||
pool_size: 10
|
|
||||||
|
|
||||||
# For development, we disable any cache and enable
|
# For development, we disable any cache and enable
|
||||||
# debugging and code reloading.
|
# debugging and code reloading.
|
||||||
|
|
|
||||||
|
|
@ -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
|
case Req.Request.put_headers(Req.new(), [{"Authorization", "Bearer #{opts[:token]}"}]) |> Req.post(url: @graphql_url, json: body) do
|
||||||
{:ok, resp} -> resp
|
{:ok, resp} -> resp
|
||||||
{:error, _} -> :error
|
{:error, e} -> raise(e)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
14
lib/ezcontainer_railway/projects.ex
Normal file
14
lib/ezcontainer_railway/projects.ex
Normal 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
|
||||||
18
lib/ezcontainer_railway/projects/project.ex
Normal file
18
lib/ezcontainer_railway/projects/project.ex
Normal 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
|
||||||
|
|
@ -8,6 +8,7 @@ defmodule EzcontainerRailway.Railway do
|
||||||
edges {
|
edges {
|
||||||
node {
|
node {
|
||||||
id
|
id
|
||||||
|
name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -16,4 +17,53 @@ defmodule EzcontainerRailway.Railway do
|
||||||
token: token
|
token: token
|
||||||
)
|
)
|
||||||
end
|
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
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,3 @@
|
||||||
defmodule EzcontainerRailway.Repo do
|
defmodule EzcontainerRailway.Repo do
|
||||||
|
use Ecto.Repo, otp_app: :ezcontainer_railway, adapter: Ecto.Adapters.SQLite3
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
benbot@darch.125027:1698169376
|
|
||||||
|
|
@ -11,7 +11,7 @@ defmodule EzcontainerRailwayWeb.ContainerController do
|
||||||
end
|
end
|
||||||
|
|
||||||
def create(conn, params) do
|
def create(conn, params) do
|
||||||
|
conn
|
||||||
end
|
end
|
||||||
|
|
||||||
def show(conn, params) do
|
def show(conn, params) do
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,29 @@
|
||||||
defmodule EzcontainerRailwayWeb.SessionController do
|
defmodule EzcontainerRailwayWeb.SessionController do
|
||||||
|
alias EzcontainerRailway.Railway
|
||||||
use EzcontainerRailwayWeb, :controller
|
use EzcontainerRailwayWeb, :controller
|
||||||
|
|
||||||
def token(conn, %{"railway_token" => token}) do
|
def token(conn, %{"railway_token" => token}) do
|
||||||
case token_valid?(token) do
|
case get_projects(token) do
|
||||||
true ->
|
resp when is_map(resp) ->
|
||||||
|
IO.inspect(resp)
|
||||||
conn
|
conn
|
||||||
|> put_session(:railway_token, token)
|
|> put_session(:railway_token, token)
|
||||||
|> assign(:railway_token, token)
|
|> assign(:railway_token, token)
|
||||||
|> redirect(to: "/containers")
|
|> redirect(to: "/containers")
|
||||||
false ->
|
nil ->
|
||||||
conn
|
conn
|
||||||
|> put_flash(:error, "Invalid Token")
|
|> put_flash(:error, "Invalid Token")
|
||||||
|> redirect(to: "/")
|
|> redirect(to: "/")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp token_valid?(token) do
|
defp get_projects(token) do
|
||||||
resp = EzcontainerRailway.Railway.get_projects(token).body
|
resp = EzcontainerRailway.Railway.get_projects(token).body
|
||||||
|
|
||||||
if has_errors?(resp["errors"]) do
|
if Railway.has_errors?(resp) do
|
||||||
false
|
nil
|
||||||
else
|
else
|
||||||
true
|
resp["data"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp has_errors?([_|_]), do: true
|
|
||||||
defp has_errors?(_), do: false
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
39
lib/ezcontainer_railway_web/live/container_create_live.ex
Normal file
39
lib/ezcontainer_railway_web/live/container_create_live.ex
Normal 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
|
||||||
|
|
@ -21,7 +21,8 @@ defmodule EzcontainerRailwayWeb.Router do
|
||||||
get "/", PageController, :home
|
get "/", PageController, :home
|
||||||
post "/token", SessionController, :token
|
post "/token", SessionController, :token
|
||||||
|
|
||||||
resources("/containers", ContainerController, only: [:index, :create, :show])
|
live "/containers", ContainerCreateLive
|
||||||
|
resources("/containers", ContainerController, only: [:create, :show])
|
||||||
end
|
end
|
||||||
|
|
||||||
# Other scopes may use custom stacks.
|
# Other scopes may use custom stacks.
|
||||||
|
|
|
||||||
9
mix.exs
9
mix.exs
|
|
@ -36,6 +36,9 @@ defmodule EzcontainerRailway.MixProject do
|
||||||
{:phoenix_html, "~> 3.3"},
|
{:phoenix_html, "~> 3.3"},
|
||||||
{:phoenix_live_reload, "~> 1.2", only: :dev},
|
{:phoenix_live_reload, "~> 1.2", only: :dev},
|
||||||
{:phoenix_live_view, "~> 0.20.1"},
|
{:phoenix_live_view, "~> 0.20.1"},
|
||||||
|
{:phoenix_ecto, "~> 4.4"},
|
||||||
|
{:ecto_sql, "~> 3.10"},
|
||||||
|
{:ecto_sqlite3, "~> 0.12"},
|
||||||
{:floki, ">= 0.30.0", only: :test},
|
{:floki, ">= 0.30.0", only: :test},
|
||||||
{:phoenix_live_dashboard, "~> 0.8.2"},
|
{:phoenix_live_dashboard, "~> 0.8.2"},
|
||||||
{:esbuild, "~> 0.7", runtime: Mix.env() == :dev},
|
{:esbuild, "~> 0.7", runtime: Mix.env() == :dev},
|
||||||
|
|
@ -60,8 +63,10 @@ defmodule EzcontainerRailway.MixProject do
|
||||||
# See the documentation for `Mix` for more info on aliases.
|
# See the documentation for `Mix` for more info on aliases.
|
||||||
defp aliases do
|
defp aliases do
|
||||||
[
|
[
|
||||||
setup: ["deps.get", "assets.setup", "assets.build"],
|
setup: ["deps.get", "ecto.setup", "assets.setup", "assets.build"],
|
||||||
test: ["test"],
|
"ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
|
||||||
|
"ecto.reset": ["ecto.drop", "ecto.setup"],
|
||||||
|
test: ["ecto.create --quiet", "ecto.migrate --quiet", "test"],
|
||||||
"assets.setup": ["tailwind.install --if-missing", "esbuild.install --if-missing"],
|
"assets.setup": ["tailwind.install --if-missing", "esbuild.install --if-missing"],
|
||||||
"assets.build": ["tailwind default", "esbuild default"],
|
"assets.build": ["tailwind default", "esbuild default"],
|
||||||
"assets.deploy": ["tailwind default --minify", "esbuild default --minify", "phx.digest"]
|
"assets.deploy": ["tailwind default --minify", "esbuild default --minify", "phx.digest"]
|
||||||
|
|
|
||||||
4
mix.lock
4
mix.lock
|
|
@ -1,5 +1,6 @@
|
||||||
%{
|
%{
|
||||||
"castore": {:hex, :castore, "1.0.4", "ff4d0fb2e6411c0479b1d965a814ea6d00e51eb2f58697446e9c41a97d940b28", [:mix], [], "hexpm", "9418c1b8144e11656f0be99943db4caf04612e3eaecefb5dae9a2a87565584f8"},
|
"castore": {:hex, :castore, "1.0.4", "ff4d0fb2e6411c0479b1d965a814ea6d00e51eb2f58697446e9c41a97d940b28", [:mix], [], "hexpm", "9418c1b8144e11656f0be99943db4caf04612e3eaecefb5dae9a2a87565584f8"},
|
||||||
|
"cc_precompiler": {:hex, :cc_precompiler, "0.1.8", "933a5f4da3b19ee56539a076076ce4d7716d64efc8db46fd066996a7e46e2bfd", [:mix], [{:elixir_make, "~> 0.7.3", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "176bdf4366956e456bf761b54ad70bc4103d0269ca9558fd7cee93d1b3f116db"},
|
||||||
"cowboy": {:hex, :cowboy, "2.10.0", "ff9ffeff91dae4ae270dd975642997afe2a1179d94b1887863e43f681a203e26", [:make, :rebar3], [{:cowlib, "2.12.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "3afdccb7183cc6f143cb14d3cf51fa00e53db9ec80cdcd525482f5e99bc41d6b"},
|
"cowboy": {:hex, :cowboy, "2.10.0", "ff9ffeff91dae4ae270dd975642997afe2a1179d94b1887863e43f681a203e26", [:make, :rebar3], [{:cowlib, "2.12.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "3afdccb7183cc6f143cb14d3cf51fa00e53db9ec80cdcd525482f5e99bc41d6b"},
|
||||||
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
|
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
|
||||||
"cowlib": {:hex, :cowlib, "2.12.1", "a9fa9a625f1d2025fe6b462cb865881329b5caff8f1854d1cbc9f9533f00e1e1", [:make, :rebar3], [], "hexpm", "163b73f6367a7341b33c794c4e88e7dbfe6498ac42dcd69ef44c5bc5507c8db0"},
|
"cowlib": {:hex, :cowlib, "2.12.1", "a9fa9a625f1d2025fe6b462cb865881329b5caff8f1854d1cbc9f9533f00e1e1", [:make, :rebar3], [], "hexpm", "163b73f6367a7341b33c794c4e88e7dbfe6498ac42dcd69ef44c5bc5507c8db0"},
|
||||||
|
|
@ -8,8 +9,11 @@
|
||||||
"dns_cluster": {:hex, :dns_cluster, "0.1.1", "73b4b2c3ec692f8a64276c43f8c929733a9ab9ac48c34e4c0b3d9d1b5cd69155", [:mix], [], "hexpm", "03a3f6ff16dcbb53e219b99c7af6aab29eb6b88acf80164b4bd76ac18dc890b3"},
|
"dns_cluster": {:hex, :dns_cluster, "0.1.1", "73b4b2c3ec692f8a64276c43f8c929733a9ab9ac48c34e4c0b3d9d1b5cd69155", [:mix], [], "hexpm", "03a3f6ff16dcbb53e219b99c7af6aab29eb6b88acf80164b4bd76ac18dc890b3"},
|
||||||
"ecto": {:hex, :ecto, "3.10.3", "eb2ae2eecd210b4eb8bece1217b297ad4ff824b4384c0e3fdd28aaf96edd6135", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "44bec74e2364d491d70f7e42cd0d690922659d329f6465e89feb8a34e8cd3433"},
|
"ecto": {:hex, :ecto, "3.10.3", "eb2ae2eecd210b4eb8bece1217b297ad4ff824b4384c0e3fdd28aaf96edd6135", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "44bec74e2364d491d70f7e42cd0d690922659d329f6465e89feb8a34e8cd3433"},
|
||||||
"ecto_sql": {:hex, :ecto_sql, "3.10.2", "6b98b46534b5c2f8b8b5f03f126e75e2a73c64f3c071149d32987a5378b0fdbd", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.10.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "68c018debca57cb9235e3889affdaec7a10616a4e3a80c99fa1d01fdafaa9007"},
|
"ecto_sql": {:hex, :ecto_sql, "3.10.2", "6b98b46534b5c2f8b8b5f03f126e75e2a73c64f3c071149d32987a5378b0fdbd", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.10.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "68c018debca57cb9235e3889affdaec7a10616a4e3a80c99fa1d01fdafaa9007"},
|
||||||
|
"ecto_sqlite3": {:hex, :ecto_sqlite3, "0.12.0", "9ee845ac45a76e3c5c0fe65898f3538f5b0969912a95f0beef3d4ae8e63f6a06", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:ecto, "~> 3.10", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "~> 3.10", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:exqlite, "~> 0.9", [hex: :exqlite, repo: "hexpm", optional: false]}], "hexpm", "4eaf8550df1fd0043bcf039a5dce407fd8afc30a115ced173fe6b9815eeedb55"},
|
||||||
|
"elixir_make": {:hex, :elixir_make, "0.7.7", "7128c60c2476019ed978210c245badf08b03dbec4f24d05790ef791da11aa17c", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "5bc19fff950fad52bbe5f211b12db9ec82c6b34a9647da0c2224b8b8464c7e6c"},
|
||||||
"esbuild": {:hex, :esbuild, "0.7.1", "fa0947e8c3c3c2f86c9bf7e791a0a385007ccd42b86885e8e893bdb6631f5169", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "66661cdf70b1378ee4dc16573fcee67750b59761b2605a0207c267ab9d19f13c"},
|
"esbuild": {:hex, :esbuild, "0.7.1", "fa0947e8c3c3c2f86c9bf7e791a0a385007ccd42b86885e8e893bdb6631f5169", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "66661cdf70b1378ee4dc16573fcee67750b59761b2605a0207c267ab9d19f13c"},
|
||||||
"expo": {:hex, :expo, "0.4.1", "1c61d18a5df197dfda38861673d392e642649a9cef7694d2f97a587b2cfb319b", [:mix], [], "hexpm", "2ff7ba7a798c8c543c12550fa0e2cbc81b95d4974c65855d8d15ba7b37a1ce47"},
|
"expo": {:hex, :expo, "0.4.1", "1c61d18a5df197dfda38861673d392e642649a9cef7694d2f97a587b2cfb319b", [:mix], [], "hexpm", "2ff7ba7a798c8c543c12550fa0e2cbc81b95d4974c65855d8d15ba7b37a1ce47"},
|
||||||
|
"exqlite": {:hex, :exqlite, "0.16.0", "d9a8d22493f135736cfc9a542cf5298dfa276c198f688ea4b08bd2c03f2a79d3", [:make, :mix], [{:cc_precompiler, "~> 0.1", [hex: :cc_precompiler, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.7", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "0ff541e1ead5cfde1206e3c2de8d746a7bf627fcc4afa606601be89f75d0057e"},
|
||||||
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
|
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
|
||||||
"finch": {:hex, :finch, "0.16.0", "40733f02c89f94a112518071c0a91fe86069560f5dbdb39f9150042f44dcfb1a", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.6 or ~> 1.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f660174c4d519e5fec629016054d60edd822cdfe2b7270836739ac2f97735ec5"},
|
"finch": {:hex, :finch, "0.16.0", "40733f02c89f94a112518071c0a91fe86069560f5dbdb39f9150042f44dcfb1a", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.6 or ~> 1.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f660174c4d519e5fec629016054d60edd822cdfe2b7270836739ac2f97735ec5"},
|
||||||
"floki": {:hex, :floki, "0.35.1", "b21cf592ed38c1207c5ea52120a2e81d6ecba11337a633a3f29ec17a64033178", [:mix], [], "hexpm", "f126e3eb814f131c21befeeeb773d2c4e2331ce05214c1a9844a3edde5c69003"},
|
"floki": {:hex, :floki, "0.35.1", "b21cf592ed38c1207c5ea52120a2e81d6ecba11337a633a3f29ec17a64033178", [:mix], [], "hexpm", "f126e3eb814f131c21befeeeb773d2c4e2331ce05214c1a9844a3edde5c69003"},
|
||||||
|
|
|
||||||
12
priv/repo/migrations/20231025082520_create_projects.exs
Normal file
12
priv/repo/migrations/20231025082520_create_projects.exs
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
defmodule EzcontainerRailway.Repo.Migrations.CreateProjects do
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
def change do
|
||||||
|
create table(:projects) do
|
||||||
|
add :user_id, :string
|
||||||
|
add :project_id, :string
|
||||||
|
|
||||||
|
timestamps(type: :utc_datetime)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Add table
Add a link
Reference in a new issue