69 lines
1.3 KiB
Elixir
69 lines
1.3 KiB
Elixir
defmodule EzcontainerRailway.Railway do
|
|
alias EzcontainerRailway.GraphqlClient
|
|
def get_projects(token) do
|
|
GraphqlClient.query(
|
|
"""
|
|
query {
|
|
projects {
|
|
edges {
|
|
node {
|
|
id
|
|
name
|
|
}
|
|
}
|
|
}
|
|
}
|
|
""",
|
|
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
|