84 lines
1.6 KiB
Elixir
84 lines
1.6 KiB
Elixir
defmodule EzcontainerRailway.Railway do
|
|
alias EzcontainerRailway.GraphqlClient
|
|
def get_projects(token) do
|
|
resp = GraphqlClient.query(
|
|
"""
|
|
query {
|
|
projects {
|
|
edges {
|
|
node {
|
|
id
|
|
name
|
|
}
|
|
}
|
|
}
|
|
}
|
|
""",
|
|
token: token
|
|
) |> format_response
|
|
|
|
case resp do
|
|
{:error, _} -> resp
|
|
{:ok, data} -> {:ok, data["projects"]["edges"]}
|
|
end
|
|
end
|
|
|
|
def create_service(container, token) when is_map(container) do
|
|
GraphqlClient.query(
|
|
"""
|
|
""",
|
|
variables: container
|
|
)
|
|
end
|
|
|
|
def create_project(token) do
|
|
resp = GraphqlClient.query(
|
|
"""
|
|
mutation {
|
|
projectCreate(input: {}) {
|
|
id
|
|
name
|
|
}
|
|
}
|
|
""",
|
|
token: token
|
|
)
|
|
|> format_response
|
|
|
|
case resp do
|
|
{:error, _} -> resp
|
|
{:ok, data} -> {:ok, data["projectCreate"]["id"]}
|
|
end
|
|
end
|
|
|
|
def get_user_id(token) do
|
|
{:ok, resp} = GraphqlClient.query(
|
|
"""
|
|
query {
|
|
me {
|
|
id
|
|
}
|
|
}
|
|
""",
|
|
token: token
|
|
)
|
|
|> format_response
|
|
|
|
{:ok, resp["me"]["id"]}
|
|
end
|
|
|
|
def has_errors?(resp) do
|
|
has_errors_in_array?(resp["errors"])
|
|
end
|
|
|
|
defp format_response(resp) when is_map(resp) do
|
|
if has_errors?(resp.body) do
|
|
{:error, resp.body["errors"]}
|
|
else
|
|
{:ok, resp.body["data"]}
|
|
end
|
|
end
|
|
|
|
defp has_errors_in_array?([_|_]), do: true
|
|
defp has_errors_in_array?(_), do: false
|
|
end
|