Ecto é um projeto oficial do Elixir que fornece uma camada de banco de dados e linguagem integrada para consultas. Com Ecto podemos criar migrações, definir esquemas, inserir e atualizar registros, e fazer consultas.


Criar banco

mix ecto.create
# The database for Rocketpay.Repo has already been created

Criar Migration

mix ecto.gen.migration nome_da_migration

Exemplo de Migration

defmodule Rocketpay.Repo.Migrations.CreateUserTable do
  use Ecto.Migration

  def change do

    create table :users do
      add :name, :string
      add :age, :integer
      add :email, :string
      add :password_hash, :string
      add :nickname, :string

      timestamps()
    end

    create unique_index(:users, [:email])
    create unique_index(:users, [:nickname])
  end
end

Rodar Migrations

mix ecto.migrate

Excluir Banco

mix ecto.drop

Exemplo de Controller, um controller sempre recebe a conexão como primeiro parametro

defmodule RocketpayWeb.WelcomeController do
  use RocketpayWeb, :controller

  alias Rocketpay.Numbers

  def index(conn, %{"filename" => filename}) do
    filename
    |> Numbers.sum_from_file()
    |> handle_response(conn)
  end

  defp handle_response({:ok, %{result: result}}, conn) do
    conn
    |> put_status(:ok)
    |> json(%{message: "Welcome to Rocketpay API. Here is your number #{result}"})
  end

  defp handle_response({:error, reason}, conn) do
    conn
    |> put_status(:bad_request)
    |> json(reason)
  end
end