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


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` 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>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
