> For the complete documentation index, see [llms.txt](https://consumindo-apis-com-elixir.cafecomelixir.com.br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://consumindo-apis-com-elixir.cafecomelixir.com.br/problemas-de-api-externa/rate-limit-de-longa-duracao/adicionando-ecto-ao-projeto.md).

# Adicionando Ecto ao projeto

## Adicionando Ecto ao projeto

Temos a página de configuração [nesse link](https://hexdocs.pm/ecto/getting-started.html). Mas farei a configuração por aqui também. Primeiro precisamos instalar as dependências

* ecto\_sql -> Wrapper do banco de dados
* postgrex -> Adaptador do Ecto para Postgress

Adicione a suas dependencias os dois.

<pre class="language-elixir" data-title="mix.exs" data-line-numbers><code class="lang-elixir">defmodule CoffeeShop.MixProject do
  use Mix.Project

  def project do
    [
      app: :coffee_shop,
      version: "0.1.0",
      elixir: "~> 1.15",
      start_permanent: Mix.env() == :prod,
      deps: deps()
    ]
  end

  # Run "mix help compile.app" to learn about applications.
  def application do
    [
      extra_applications: [:logger],
      mod: {CoffeeShop.Application, []}
    ]
  end

  # Run "mix help deps" to learn about dependencies.
  defp deps do
    [
      {:tesla, "~> 1.4"},
      {:bypass, "~> 2.1"},
<strong>      {:ecto_sql, "~> 3.0"},
</strong><strong>      {:postgrex, ">= 0.0.0"}
</strong>    ]
  end
end
</code></pre>

Depois basta gerir as dependências

```
mix deps.get
```

```
> mix deps.get
Resolving Hex dependencies...
Resolution completed in 0.125s
New:
  db_connection 2.6.0
  decimal 2.1.1
  ecto 3.11.2
  ecto_sql 3.11.1
  postgrex 0.17.5
Unchanged:
  bypass 2.1.0
  cowboy 2.12.0
  cowboy_telemetry 0.4.0
  cowlib 2.13.0
  mime 2.0.5
  plug 1.15.3
  plug_cowboy 2.7.1
  plug_crypto 2.0.0
  ranch 1.8.0
  telemetry 1.2.1
  tesla 1.8.0
* Getting ecto_sql (Hex package)
* Getting postgrex (Hex package)
* Getting db_connection (Hex package)
* Getting decimal (Hex package)
* Getting ecto (Hex package)
```

Feito isso, vamos a configuração

Quando instalamos *Ecto*, ganhamos também alguns geradores que vão nos auxiliar.  O comando irá gerar a configuração necessária para nos conectar ao banco de dados.

```
mix ecto.gen.repo -r CoffeeShop.Repo
```

```elixir
> mix ecto.gen.repo -r CoffeeShop.Repo
* creating lib/coffee_shop
* creating lib/coffee_shop/repo.ex
* creating config/config.exs
Don't forget to add your new repo to your supervision tree
(typically in lib/coffee_shop/application.ex):

    def start(_type, _args) do
      children = [
        CoffeeShop.Repo,
      ]

And to add it to the list of Ecto repositories in your
configuration files (so Ecto tasks work as expected):

    config :coffee_shop,
      ecto_repos: [CoffeeShop.Repo]
```

Ele gerou o arquivo `lib/coffee_shop/repo.ex` com a configuração para o banco de dados. Também foi adicionadm em `config/config.exs` a configuração de acesso ao banco. E por fim, nos avisou que  precisamos fazer duas coisas:

1. Adicionar ao supervisor de nossa aplicação o módulo criado `CoffeeShop.Repo`
2. Adicionar a configuraçãao em`config/config.exs`

Vamos adicionar o supevisor do Ecto ao supervisor de nossa aplicação. Abra `lib/coffee_shop/application.ex` que criamos para dar suporte a árvore de supervisor e adicione o módulo `Repo` a lista `children`.

<pre class="language-elixir" data-title="lib/coffee_shop/application.ex" data-line-numbers><code class="lang-elixir">defmodule CoffeeShop.Application do
  use Application

  def start(_type, _args) do
    children = [
<strong>      CoffeeShop.Repo
</strong>    ]

    opts = [strategy: :one_for_one, name: CoffeeShop.Supervisor]

    Supervisor.start_link(children, opts)
  end
end

</code></pre>

Com isso temos o `Repo` como filho de nosso supervisor.&#x20;

Agora vamos finalizar a configuração, adicionando a configuração de nosso repositório ecto em `config/confg.exs`

<pre class="language-elixir" data-title="config/config.exs" data-line-numbers><code class="lang-elixir">import Config

<strong>config :coffee_shop,
</strong><strong>  ecto_repos: [CoffeeShop.Repo]
</strong>
config :coffee_shop, CoffeeShop.Repo,
  database: "coffee_shop",
  username: "postgres",
  password: "postgres",
  hostname: "localhost"
</code></pre>

Adicionado a linha 3, temos tudo configurado.

{% hint style="info" %}
A configuração da linha 6 vai depender de como você configurou seu banco de dados.
{% endhint %}

Feito isso, temos o *Ecto* configurado para nosso banco de dados. Agora vamos criar nosso banco. Tendo a adição do *Ecto* ao projeto, podemos simplesmente criar nosso banco usando o comando&#x20;

```
mix ecto.create
```

```
> mix ecto.create                     
Compiling 6 files (.ex)
Generated coffee_shop app
The database for CoffeeShop.Repo has been created
```

Nossa aplicação tem suporte a banco de dados *postgres*. Matamos então mais um passo

* [~~Configurar *Ecto* para se comunicar com *Postgres*~~](/problemas-de-api-externa/rate-limit-de-longa-duracao/adicionando-ecto-ao-projeto.md)
* [Configurar *Oban*](/problemas-de-api-externa/rate-limit-de-longa-duracao/instalando-oban.md)

Vamos lá.
