# 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á.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://consumindo-apis-com-elixir.cafecomelixir.com.br/problemas-de-api-externa/rate-limit-de-longa-duracao/adicionando-ecto-ao-projeto.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
